Files

4222 lines
238 KiB
HTML

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="generator" content="Asciidoctor 2.0.23">
<title>Boost.Uuid</title>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700">
<style>
/*! Asciidoctor default stylesheet | MIT License | https://asciidoctor.org */
/* Uncomment the following line when using as a custom stylesheet */
/* @import "https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700"; */
html{font-family:sans-serif;-webkit-text-size-adjust:100%}
a{background:none}
a:focus{outline:thin dotted}
a:active,a:hover{outline:0}
h1{font-size:2em;margin:.67em 0}
b,strong{font-weight:bold}
abbr{font-size:.9em}
abbr[title]{cursor:help;border-bottom:1px dotted #dddddf;text-decoration:none}
dfn{font-style:italic}
hr{height:0}
mark{background:#ff0;color:#000}
code,kbd,pre,samp{font-family:monospace;font-size:1em}
pre{white-space:pre-wrap}
q{quotes:"\201C" "\201D" "\2018" "\2019"}
small{font-size:80%}
sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}
sup{top:-.5em}
sub{bottom:-.25em}
img{border:0}
svg:not(:root){overflow:hidden}
figure{margin:0}
audio,video{display:inline-block}
audio:not([controls]){display:none;height:0}
fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}
legend{border:0;padding:0}
button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}
button,input{line-height:normal}
button,select{text-transform:none}
button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}
button[disabled],html input[disabled]{cursor:default}
input[type=checkbox],input[type=radio]{padding:0}
button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}
textarea{overflow:auto;vertical-align:top}
table{border-collapse:collapse;border-spacing:0}
*,::before,::after{box-sizing:border-box}
html,body{font-size:100%}
body{background:#fff;color:rgba(0,0,0,.8);padding:0;margin:0;font-family:"Noto Serif","DejaVu Serif",serif;line-height:1;position:relative;cursor:auto;-moz-tab-size:4;-o-tab-size:4;tab-size:4;word-wrap:anywhere;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}
a:hover{cursor:pointer}
img,object,embed{max-width:100%;height:auto}
object,embed{height:100%}
img{-ms-interpolation-mode:bicubic}
.left{float:left!important}
.right{float:right!important}
.text-left{text-align:left!important}
.text-right{text-align:right!important}
.text-center{text-align:center!important}
.text-justify{text-align:justify!important}
.hide{display:none}
img,object,svg{display:inline-block;vertical-align:middle}
textarea{height:auto;min-height:50px}
select{width:100%}
.subheader,.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{line-height:1.45;color:#7a2518;font-weight:400;margin-top:0;margin-bottom:.25em}
div,dl,dt,dd,ul,ol,li,h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6,pre,form,p,blockquote,th,td{margin:0;padding:0}
a{color:#2156a5;text-decoration:underline;line-height:inherit}
a:hover,a:focus{color:#1d4b8f}
a img{border:0}
p{line-height:1.6;margin-bottom:1.25em;text-rendering:optimizeLegibility}
p aside{font-size:.875em;line-height:1.35;font-style:italic}
h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{font-family:"Open Sans","DejaVu Sans",sans-serif;font-weight:300;font-style:normal;color:#ba3925;text-rendering:optimizeLegibility;margin-top:1em;margin-bottom:.5em;line-height:1.0125em}
h1 small,h2 small,h3 small,#toctitle small,.sidebarblock>.content>.title small,h4 small,h5 small,h6 small{font-size:60%;color:#e99b8f;line-height:0}
h1{font-size:2.125em}
h2{font-size:1.6875em}
h3,#toctitle,.sidebarblock>.content>.title{font-size:1.375em}
h4,h5{font-size:1.125em}
h6{font-size:1em}
hr{border:solid #dddddf;border-width:1px 0 0;clear:both;margin:1.25em 0 1.1875em}
em,i{font-style:italic;line-height:inherit}
strong,b{font-weight:bold;line-height:inherit}
small{font-size:60%;line-height:inherit}
code{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;color:rgba(0,0,0,.9)}
ul,ol,dl{line-height:1.6;margin-bottom:1.25em;list-style-position:outside;font-family:inherit}
ul,ol{margin-left:1.5em}
ul li ul,ul li ol{margin-left:1.25em;margin-bottom:0}
ul.circle{list-style-type:circle}
ul.disc{list-style-type:disc}
ul.square{list-style-type:square}
ul.circle ul:not([class]),ul.disc ul:not([class]),ul.square ul:not([class]){list-style:inherit}
ol li ul,ol li ol{margin-left:1.25em;margin-bottom:0}
dl dt{margin-bottom:.3125em;font-weight:bold}
dl dd{margin-bottom:1.25em}
blockquote{margin:0 0 1.25em;padding:.5625em 1.25em 0 1.1875em;border-left:1px solid #ddd}
blockquote,blockquote p{line-height:1.6;color:rgba(0,0,0,.85)}
@media screen and (min-width:768px){h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2}
h1{font-size:2.75em}
h2{font-size:2.3125em}
h3,#toctitle,.sidebarblock>.content>.title{font-size:1.6875em}
h4{font-size:1.4375em}}
table{background:#fff;margin-bottom:1.25em;border:1px solid #dedede;word-wrap:normal}
table thead,table tfoot{background:#f7f8f7}
table thead tr th,table thead tr td,table tfoot tr th,table tfoot tr td{padding:.5em .625em .625em;font-size:inherit;color:rgba(0,0,0,.8);text-align:left}
table tr th,table tr td{padding:.5625em .625em;font-size:inherit;color:rgba(0,0,0,.8)}
table tr.even,table tr.alt{background:#f8f8f7}
table thead tr th,table tfoot tr th,table tbody tr td,table tr td,table tfoot tr td{line-height:1.6}
h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2;word-spacing:-.05em}
h1 strong,h2 strong,h3 strong,#toctitle strong,.sidebarblock>.content>.title strong,h4 strong,h5 strong,h6 strong{font-weight:400}
.center{margin-left:auto;margin-right:auto}
.stretch{width:100%}
.clearfix::before,.clearfix::after,.float-group::before,.float-group::after{content:" ";display:table}
.clearfix::after,.float-group::after{clear:both}
:not(pre).nobreak{word-wrap:normal}
:not(pre).nowrap{white-space:nowrap}
:not(pre).pre-wrap{white-space:pre-wrap}
:not(pre):not([class^=L])>code{font-size:.9375em;font-style:normal!important;letter-spacing:0;padding:.1em .5ex;word-spacing:-.15em;background:#f7f7f8;border-radius:4px;line-height:1.45;text-rendering:optimizeSpeed}
pre{color:rgba(0,0,0,.9);font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;line-height:1.45;text-rendering:optimizeSpeed}
pre code,pre pre{color:inherit;font-size:inherit;line-height:inherit}
pre>code{display:block}
pre.nowrap,pre.nowrap pre{white-space:pre;word-wrap:normal}
em em{font-style:normal}
strong strong{font-weight:400}
.keyseq{color:rgba(51,51,51,.8)}
kbd{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;display:inline-block;color:rgba(0,0,0,.8);font-size:.65em;line-height:1.45;background:#f7f7f7;border:1px solid #ccc;border-radius:3px;box-shadow:0 1px 0 rgba(0,0,0,.2),inset 0 0 0 .1em #fff;margin:0 .15em;padding:.2em .5em;vertical-align:middle;position:relative;top:-.1em;white-space:nowrap}
.keyseq kbd:first-child{margin-left:0}
.keyseq kbd:last-child{margin-right:0}
.menuseq,.menuref{color:#000}
.menuseq b:not(.caret),.menuref{font-weight:inherit}
.menuseq{word-spacing:-.02em}
.menuseq b.caret{font-size:1.25em;line-height:.8}
.menuseq i.caret{font-weight:bold;text-align:center;width:.45em}
b.button::before,b.button::after{position:relative;top:-1px;font-weight:400}
b.button::before{content:"[";padding:0 3px 0 2px}
b.button::after{content:"]";padding:0 2px 0 3px}
p a>code:hover{color:rgba(0,0,0,.9)}
#header,#content,#footnotes,#footer{width:100%;margin:0 auto;max-width:62.5em;*zoom:1;position:relative;padding-left:.9375em;padding-right:.9375em}
#header::before,#header::after,#content::before,#content::after,#footnotes::before,#footnotes::after,#footer::before,#footer::after{content:" ";display:table}
#header::after,#content::after,#footnotes::after,#footer::after{clear:both}
#content{margin-top:1.25em}
#content::before{content:none}
#header>h1:first-child{color:rgba(0,0,0,.85);margin-top:2.25rem;margin-bottom:0}
#header>h1:first-child+#toc{margin-top:8px;border-top:1px solid #dddddf}
#header>h1:only-child{border-bottom:1px solid #dddddf;padding-bottom:8px}
#header .details{border-bottom:1px solid #dddddf;line-height:1.45;padding-top:.25em;padding-bottom:.25em;padding-left:.25em;color:rgba(0,0,0,.6);display:flex;flex-flow:row wrap}
#header .details span:first-child{margin-left:-.125em}
#header .details span.email a{color:rgba(0,0,0,.85)}
#header .details br{display:none}
#header .details br+span::before{content:"\00a0\2013\00a0"}
#header .details br+span.author::before{content:"\00a0\22c5\00a0";color:rgba(0,0,0,.85)}
#header .details br+span#revremark::before{content:"\00a0|\00a0"}
#header #revnumber{text-transform:capitalize}
#header #revnumber::after{content:"\00a0"}
#content>h1:first-child:not([class]){color:rgba(0,0,0,.85);border-bottom:1px solid #dddddf;padding-bottom:8px;margin-top:0;padding-top:1rem;margin-bottom:1.25rem}
#toc{border-bottom:1px solid #e7e7e9;padding-bottom:.5em}
#toc>ul{margin-left:.125em}
#toc ul.sectlevel0>li>a{font-style:italic}
#toc ul.sectlevel0 ul.sectlevel1{margin:.5em 0}
#toc ul{font-family:"Open Sans","DejaVu Sans",sans-serif;list-style-type:none}
#toc li{line-height:1.3334;margin-top:.3334em}
#toc a{text-decoration:none}
#toc a:active{text-decoration:underline}
#toctitle{color:#7a2518;font-size:1.2em}
@media screen and (min-width:768px){#toctitle{font-size:1.375em}
body.toc2{padding-left:15em;padding-right:0}
body.toc2 #header>h1:nth-last-child(2){border-bottom:1px solid #dddddf;padding-bottom:8px}
#toc.toc2{margin-top:0!important;background:#f8f8f7;position:fixed;width:15em;left:0;top:0;border-right:1px solid #e7e7e9;border-top-width:0!important;border-bottom-width:0!important;z-index:1000;padding:1.25em 1em;height:100%;overflow:auto}
#toc.toc2 #toctitle{margin-top:0;margin-bottom:.8rem;font-size:1.2em}
#toc.toc2>ul{font-size:.9em;margin-bottom:0}
#toc.toc2 ul ul{margin-left:0;padding-left:1em}
#toc.toc2 ul.sectlevel0 ul.sectlevel1{padding-left:0;margin-top:.5em;margin-bottom:.5em}
body.toc2.toc-right{padding-left:0;padding-right:15em}
body.toc2.toc-right #toc.toc2{border-right-width:0;border-left:1px solid #e7e7e9;left:auto;right:0}}
@media screen and (min-width:1280px){body.toc2{padding-left:20em;padding-right:0}
#toc.toc2{width:20em}
#toc.toc2 #toctitle{font-size:1.375em}
#toc.toc2>ul{font-size:.95em}
#toc.toc2 ul ul{padding-left:1.25em}
body.toc2.toc-right{padding-left:0;padding-right:20em}}
#content #toc{border:1px solid #e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;border-radius:4px}
#content #toc>:first-child{margin-top:0}
#content #toc>:last-child{margin-bottom:0}
#footer{max-width:none;background:rgba(0,0,0,.8);padding:1.25em}
#footer-text{color:hsla(0,0%,100%,.8);line-height:1.44}
#content{margin-bottom:.625em}
.sect1{padding-bottom:.625em}
@media screen and (min-width:768px){#content{margin-bottom:1.25em}
.sect1{padding-bottom:1.25em}}
.sect1:last-child{padding-bottom:0}
.sect1+.sect1{border-top:1px solid #e7e7e9}
#content h1>a.anchor,h2>a.anchor,h3>a.anchor,#toctitle>a.anchor,.sidebarblock>.content>.title>a.anchor,h4>a.anchor,h5>a.anchor,h6>a.anchor{position:absolute;z-index:1001;width:1.5ex;margin-left:-1.5ex;display:block;text-decoration:none!important;visibility:hidden;text-align:center;font-weight:400}
#content h1>a.anchor::before,h2>a.anchor::before,h3>a.anchor::before,#toctitle>a.anchor::before,.sidebarblock>.content>.title>a.anchor::before,h4>a.anchor::before,h5>a.anchor::before,h6>a.anchor::before{content:"\00A7";font-size:.85em;display:block;padding-top:.1em}
#content h1:hover>a.anchor,#content h1>a.anchor:hover,h2:hover>a.anchor,h2>a.anchor:hover,h3:hover>a.anchor,#toctitle:hover>a.anchor,.sidebarblock>.content>.title:hover>a.anchor,h3>a.anchor:hover,#toctitle>a.anchor:hover,.sidebarblock>.content>.title>a.anchor:hover,h4:hover>a.anchor,h4>a.anchor:hover,h5:hover>a.anchor,h5>a.anchor:hover,h6:hover>a.anchor,h6>a.anchor:hover{visibility:visible}
#content h1>a.link,h2>a.link,h3>a.link,#toctitle>a.link,.sidebarblock>.content>.title>a.link,h4>a.link,h5>a.link,h6>a.link{color:#ba3925;text-decoration:none}
#content h1>a.link:hover,h2>a.link:hover,h3>a.link:hover,#toctitle>a.link:hover,.sidebarblock>.content>.title>a.link:hover,h4>a.link:hover,h5>a.link:hover,h6>a.link:hover{color:#a53221}
details,.audioblock,.imageblock,.literalblock,.listingblock,.stemblock,.videoblock{margin-bottom:1.25em}
details{margin-left:1.25rem}
details>summary{cursor:pointer;display:block;position:relative;line-height:1.6;margin-bottom:.625rem;outline:none;-webkit-tap-highlight-color:transparent}
details>summary::-webkit-details-marker{display:none}
details>summary::before{content:"";border:solid transparent;border-left:solid;border-width:.3em 0 .3em .5em;position:absolute;top:.5em;left:-1.25rem;transform:translateX(15%)}
details[open]>summary::before{border:solid transparent;border-top:solid;border-width:.5em .3em 0;transform:translateY(15%)}
details>summary::after{content:"";width:1.25rem;height:1em;position:absolute;top:.3em;left:-1.25rem}
.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{text-rendering:optimizeLegibility;text-align:left;font-family:"Noto Serif","DejaVu Serif",serif;font-size:1rem;font-style:italic}
table.tableblock.fit-content>caption.title{white-space:nowrap;width:0}
.paragraph.lead>p,#preamble>.sectionbody>[class=paragraph]:first-of-type p{font-size:1.21875em;line-height:1.6;color:rgba(0,0,0,.85)}
.admonitionblock>table{border-collapse:separate;border:0;background:none;width:100%}
.admonitionblock>table td.icon{text-align:center;width:80px}
.admonitionblock>table td.icon img{max-width:none}
.admonitionblock>table td.icon .title{font-weight:bold;font-family:"Open Sans","DejaVu Sans",sans-serif;text-transform:uppercase}
.admonitionblock>table td.content{padding-left:1.125em;padding-right:1.25em;border-left:1px solid #dddddf;color:rgba(0,0,0,.6);word-wrap:anywhere}
.admonitionblock>table td.content>:last-child>:last-child{margin-bottom:0}
.exampleblock>.content{border:1px solid #e6e6e6;margin-bottom:1.25em;padding:1.25em;background:#fff;border-radius:4px}
.sidebarblock{border:1px solid #dbdbd6;margin-bottom:1.25em;padding:1.25em;background:#f3f3f2;border-radius:4px}
.sidebarblock>.content>.title{color:#7a2518;margin-top:0;text-align:center}
.exampleblock>.content>:first-child,.sidebarblock>.content>:first-child{margin-top:0}
.exampleblock>.content>:last-child,.exampleblock>.content>:last-child>:last-child,.exampleblock>.content .olist>ol>li:last-child>:last-child,.exampleblock>.content .ulist>ul>li:last-child>:last-child,.exampleblock>.content .qlist>ol>li:last-child>:last-child,.sidebarblock>.content>:last-child,.sidebarblock>.content>:last-child>:last-child,.sidebarblock>.content .olist>ol>li:last-child>:last-child,.sidebarblock>.content .ulist>ul>li:last-child>:last-child,.sidebarblock>.content .qlist>ol>li:last-child>:last-child{margin-bottom:0}
.literalblock pre,.listingblock>.content>pre{border-radius:4px;overflow-x:auto;padding:1em;font-size:.8125em}
@media screen and (min-width:768px){.literalblock pre,.listingblock>.content>pre{font-size:.90625em}}
@media screen and (min-width:1280px){.literalblock pre,.listingblock>.content>pre{font-size:1em}}
.literalblock pre,.listingblock>.content>pre:not(.highlight),.listingblock>.content>pre[class=highlight],.listingblock>.content>pre[class^="highlight "]{background:#f7f7f8}
.literalblock.output pre{color:#f7f7f8;background:rgba(0,0,0,.9)}
.listingblock>.content{position:relative}
.listingblock code[data-lang]::before{display:none;content:attr(data-lang);position:absolute;font-size:.75em;top:.425rem;right:.5rem;line-height:1;text-transform:uppercase;color:inherit;opacity:.5}
.listingblock:hover code[data-lang]::before{display:block}
.listingblock.terminal pre .command::before{content:attr(data-prompt);padding-right:.5em;color:inherit;opacity:.5}
.listingblock.terminal pre .command:not([data-prompt])::before{content:"$"}
.listingblock pre.highlightjs{padding:0}
.listingblock pre.highlightjs>code{padding:1em;border-radius:4px}
.listingblock pre.prettyprint{border-width:0}
.prettyprint{background:#f7f7f8}
pre.prettyprint .linenums{line-height:1.45;margin-left:2em}
pre.prettyprint li{background:none;list-style-type:inherit;padding-left:0}
pre.prettyprint li code[data-lang]::before{opacity:1}
pre.prettyprint li:not(:first-child) code[data-lang]::before{display:none}
table.linenotable{border-collapse:separate;border:0;margin-bottom:0;background:none}
table.linenotable td[class]{color:inherit;vertical-align:top;padding:0;line-height:inherit;white-space:normal}
table.linenotable td.code{padding-left:.75em}
table.linenotable td.linenos,pre.pygments .linenos{border-right:1px solid;opacity:.35;padding-right:.5em;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}
pre.pygments span.linenos{display:inline-block;margin-right:.75em}
.quoteblock{margin:0 1em 1.25em 1.5em;display:table}
.quoteblock:not(.excerpt)>.title{margin-left:-1.5em;margin-bottom:.75em}
.quoteblock blockquote,.quoteblock p{color:rgba(0,0,0,.85);font-size:1.15rem;line-height:1.75;word-spacing:.1em;letter-spacing:0;font-style:italic;text-align:justify}
.quoteblock blockquote{margin:0;padding:0;border:0}
.quoteblock blockquote::before{content:"\201c";float:left;font-size:2.75em;font-weight:bold;line-height:.6em;margin-left:-.6em;color:#7a2518;text-shadow:0 1px 2px rgba(0,0,0,.1)}
.quoteblock blockquote>.paragraph:last-child p{margin-bottom:0}
.quoteblock .attribution{margin-top:.75em;margin-right:.5ex;text-align:right}
.verseblock{margin:0 1em 1.25em}
.verseblock pre{font-family:"Open Sans","DejaVu Sans",sans-serif;font-size:1.15rem;color:rgba(0,0,0,.85);font-weight:300;text-rendering:optimizeLegibility}
.verseblock pre strong{font-weight:400}
.verseblock .attribution{margin-top:1.25rem;margin-left:.5ex}
.quoteblock .attribution,.verseblock .attribution{font-size:.9375em;line-height:1.45;font-style:italic}
.quoteblock .attribution br,.verseblock .attribution br{display:none}
.quoteblock .attribution cite,.verseblock .attribution cite{display:block;letter-spacing:-.025em;color:rgba(0,0,0,.6)}
.quoteblock.abstract blockquote::before,.quoteblock.excerpt blockquote::before,.quoteblock .quoteblock blockquote::before{display:none}
.quoteblock.abstract blockquote,.quoteblock.abstract p,.quoteblock.excerpt blockquote,.quoteblock.excerpt p,.quoteblock .quoteblock blockquote,.quoteblock .quoteblock p{line-height:1.6;word-spacing:0}
.quoteblock.abstract{margin:0 1em 1.25em;display:block}
.quoteblock.abstract>.title{margin:0 0 .375em;font-size:1.15em;text-align:center}
.quoteblock.excerpt>blockquote,.quoteblock .quoteblock{padding:0 0 .25em 1em;border-left:.25em solid #dddddf}
.quoteblock.excerpt,.quoteblock .quoteblock{margin-left:0}
.quoteblock.excerpt blockquote,.quoteblock.excerpt p,.quoteblock .quoteblock blockquote,.quoteblock .quoteblock p{color:inherit;font-size:1.0625rem}
.quoteblock.excerpt .attribution,.quoteblock .quoteblock .attribution{color:inherit;font-size:.85rem;text-align:left;margin-right:0}
p.tableblock:last-child{margin-bottom:0}
td.tableblock>.content{margin-bottom:1.25em;word-wrap:anywhere}
td.tableblock>.content>:last-child{margin-bottom:-1.25em}
table.tableblock,th.tableblock,td.tableblock{border:0 solid #dedede}
table.grid-all>*>tr>*{border-width:1px}
table.grid-cols>*>tr>*{border-width:0 1px}
table.grid-rows>*>tr>*{border-width:1px 0}
table.frame-all{border-width:1px}
table.frame-ends{border-width:1px 0}
table.frame-sides{border-width:0 1px}
table.frame-none>colgroup+*>:first-child>*,table.frame-sides>colgroup+*>:first-child>*{border-top-width:0}
table.frame-none>:last-child>:last-child>*,table.frame-sides>:last-child>:last-child>*{border-bottom-width:0}
table.frame-none>*>tr>:first-child,table.frame-ends>*>tr>:first-child{border-left-width:0}
table.frame-none>*>tr>:last-child,table.frame-ends>*>tr>:last-child{border-right-width:0}
table.stripes-all>*>tr,table.stripes-odd>*>tr:nth-of-type(odd),table.stripes-even>*>tr:nth-of-type(even),table.stripes-hover>*>tr:hover{background:#f8f8f7}
th.halign-left,td.halign-left{text-align:left}
th.halign-right,td.halign-right{text-align:right}
th.halign-center,td.halign-center{text-align:center}
th.valign-top,td.valign-top{vertical-align:top}
th.valign-bottom,td.valign-bottom{vertical-align:bottom}
th.valign-middle,td.valign-middle{vertical-align:middle}
table thead th,table tfoot th{font-weight:bold}
tbody tr th{background:#f7f8f7}
tbody tr th,tbody tr th p,tfoot tr th,tfoot tr th p{color:rgba(0,0,0,.8);font-weight:bold}
p.tableblock>code:only-child{background:none;padding:0}
p.tableblock{font-size:1em}
ol{margin-left:1.75em}
ul li ol{margin-left:1.5em}
dl dd{margin-left:1.125em}
dl dd:last-child,dl dd:last-child>:last-child{margin-bottom:0}
li p,ul dd,ol dd,.olist .olist,.ulist .ulist,.ulist .olist,.olist .ulist{margin-bottom:.625em}
ul.checklist,ul.none,ol.none,ul.no-bullet,ol.no-bullet,ol.unnumbered,ul.unstyled,ol.unstyled{list-style-type:none}
ul.no-bullet,ol.no-bullet,ol.unnumbered{margin-left:.625em}
ul.unstyled,ol.unstyled{margin-left:0}
li>p:empty:only-child::before{content:"";display:inline-block}
ul.checklist>li>p:first-child{margin-left:-1em}
ul.checklist>li>p:first-child>.fa-square-o:first-child,ul.checklist>li>p:first-child>.fa-check-square-o:first-child{width:1.25em;font-size:.8em;position:relative;bottom:.125em}
ul.checklist>li>p:first-child>input[type=checkbox]:first-child{margin-right:.25em}
ul.inline{display:flex;flex-flow:row wrap;list-style:none;margin:0 0 .625em -1.25em}
ul.inline>li{margin-left:1.25em}
.unstyled dl dt{font-weight:400;font-style:normal}
ol.arabic{list-style-type:decimal}
ol.decimal{list-style-type:decimal-leading-zero}
ol.loweralpha{list-style-type:lower-alpha}
ol.upperalpha{list-style-type:upper-alpha}
ol.lowerroman{list-style-type:lower-roman}
ol.upperroman{list-style-type:upper-roman}
ol.lowergreek{list-style-type:lower-greek}
.hdlist>table,.colist>table{border:0;background:none}
.hdlist>table>tbody>tr,.colist>table>tbody>tr{background:none}
td.hdlist1,td.hdlist2{vertical-align:top;padding:0 .625em}
td.hdlist1{font-weight:bold;padding-bottom:1.25em}
td.hdlist2{word-wrap:anywhere}
.literalblock+.colist,.listingblock+.colist{margin-top:-.5em}
.colist td:not([class]):first-child{padding:.4em .75em 0;line-height:1;vertical-align:top}
.colist td:not([class]):first-child img{max-width:none}
.colist td:not([class]):last-child{padding:.25em 0}
.thumb,.th{line-height:0;display:inline-block;border:4px solid #fff;box-shadow:0 0 0 1px #ddd}
.imageblock.left{margin:.25em .625em 1.25em 0}
.imageblock.right{margin:.25em 0 1.25em .625em}
.imageblock>.title{margin-bottom:0}
.imageblock.thumb,.imageblock.th{border-width:6px}
.imageblock.thumb>.title,.imageblock.th>.title{padding:0 .125em}
.image.left,.image.right{margin-top:.25em;margin-bottom:.25em;display:inline-block;line-height:0}
.image.left{margin-right:.625em}
.image.right{margin-left:.625em}
a.image{text-decoration:none;display:inline-block}
a.image object{pointer-events:none}
sup.footnote,sup.footnoteref{font-size:.875em;position:static;vertical-align:super}
sup.footnote a,sup.footnoteref a{text-decoration:none}
sup.footnote a:active,sup.footnoteref a:active,#footnotes .footnote a:first-of-type:active{text-decoration:underline}
#footnotes{padding-top:.75em;padding-bottom:.75em;margin-bottom:.625em}
#footnotes hr{width:20%;min-width:6.25em;margin:-.25em 0 .75em;border-width:1px 0 0}
#footnotes .footnote{padding:0 .375em 0 .225em;line-height:1.3334;font-size:.875em;margin-left:1.2em;margin-bottom:.2em}
#footnotes .footnote a:first-of-type{font-weight:bold;text-decoration:none;margin-left:-1.05em}
#footnotes .footnote:last-of-type{margin-bottom:0}
#content #footnotes{margin-top:-.625em;margin-bottom:0;padding:.75em 0}
div.unbreakable{page-break-inside:avoid}
.big{font-size:larger}
.small{font-size:smaller}
.underline{text-decoration:underline}
.overline{text-decoration:overline}
.line-through{text-decoration:line-through}
.aqua{color:#00bfbf}
.aqua-background{background:#00fafa}
.black{color:#000}
.black-background{background:#000}
.blue{color:#0000bf}
.blue-background{background:#0000fa}
.fuchsia{color:#bf00bf}
.fuchsia-background{background:#fa00fa}
.gray{color:#606060}
.gray-background{background:#7d7d7d}
.green{color:#006000}
.green-background{background:#007d00}
.lime{color:#00bf00}
.lime-background{background:#00fa00}
.maroon{color:#600000}
.maroon-background{background:#7d0000}
.navy{color:#000060}
.navy-background{background:#00007d}
.olive{color:#606000}
.olive-background{background:#7d7d00}
.purple{color:#600060}
.purple-background{background:#7d007d}
.red{color:#bf0000}
.red-background{background:#fa0000}
.silver{color:#909090}
.silver-background{background:#bcbcbc}
.teal{color:#006060}
.teal-background{background:#007d7d}
.white{color:#bfbfbf}
.white-background{background:#fafafa}
.yellow{color:#bfbf00}
.yellow-background{background:#fafa00}
span.icon>.fa{cursor:default}
a span.icon>.fa{cursor:inherit}
.admonitionblock td.icon [class^="fa icon-"]{font-size:2.5em;text-shadow:1px 1px 2px rgba(0,0,0,.5);cursor:default}
.admonitionblock td.icon .icon-note::before{content:"\f05a";color:#19407c}
.admonitionblock td.icon .icon-tip::before{content:"\f0eb";text-shadow:1px 1px 2px rgba(155,155,0,.8);color:#111}
.admonitionblock td.icon .icon-warning::before{content:"\f071";color:#bf6900}
.admonitionblock td.icon .icon-caution::before{content:"\f06d";color:#bf3400}
.admonitionblock td.icon .icon-important::before{content:"\f06a";color:#bf0000}
.conum[data-value]{display:inline-block;color:#fff!important;background:rgba(0,0,0,.8);border-radius:50%;text-align:center;font-size:.75em;width:1.67em;height:1.67em;line-height:1.67em;font-family:"Open Sans","DejaVu Sans",sans-serif;font-style:normal;font-weight:bold}
.conum[data-value] *{color:#fff!important}
.conum[data-value]+b{display:none}
.conum[data-value]::after{content:attr(data-value)}
pre .conum[data-value]{position:relative;top:-.125em}
b.conum *{color:inherit!important}
.conum:not([data-value]):empty{display:none}
dt,th.tableblock,td.content,div.footnote{text-rendering:optimizeLegibility}
h1,h2,p,td.content,span.alt,summary{letter-spacing:-.01em}
p strong,td.content strong,div.footnote strong{letter-spacing:-.005em}
p,blockquote,dt,td.content,td.hdlist1,span.alt,summary{font-size:1.0625rem}
p{margin-bottom:1.25rem}
.sidebarblock p,.sidebarblock dt,.sidebarblock td.content,p.tableblock{font-size:1em}
.exampleblock>.content{background:#fffef7;border-color:#e0e0dc;box-shadow:0 1px 4px #e0e0dc}
.print-only{display:none!important}
@page{margin:1.25cm .75cm}
@media print{*{box-shadow:none!important;text-shadow:none!important}
html{font-size:80%}
a{color:inherit!important;text-decoration:underline!important}
a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none!important}
a[href^="http:"]:not(.bare)::after,a[href^="https:"]:not(.bare)::after{content:"(" attr(href) ")";display:inline-block;font-size:.875em;padding-left:.25em}
abbr[title]{border-bottom:1px dotted}
abbr[title]::after{content:" (" attr(title) ")"}
pre,blockquote,tr,img,object,svg{page-break-inside:avoid}
thead{display:table-header-group}
svg{max-width:100%}
p,blockquote,dt,td.content{font-size:1em;orphans:3;widows:3}
h2,h3,#toctitle,.sidebarblock>.content>.title{page-break-after:avoid}
#header,#content,#footnotes,#footer{max-width:none}
#toc,.sidebarblock,.exampleblock>.content{background:none!important}
#toc{border-bottom:1px solid #dddddf!important;padding-bottom:0!important}
body.book #header{text-align:center}
body.book #header>h1:first-child{border:0!important;margin:2.5em 0 1em}
body.book #header .details{border:0!important;display:block;padding:0!important}
body.book #header .details span:first-child{margin-left:0!important}
body.book #header .details br{display:block}
body.book #header .details br+span::before{content:none!important}
body.book #toc{border:0!important;text-align:left!important;padding:0!important;margin:0!important}
body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-break-before:always}
.listingblock code[data-lang]::before{display:block}
#footer{padding:0 .9375em}
.hide-on-print{display:none!important}
.print-only{display:block!important}
.hide-for-print{display:none!important}
.show-for-print{display:inherit!important}}
@media amzn-kf8,print{#header>h1:first-child{margin-top:1.25rem}
.sect1{padding:0!important}
.sect1+.sect1{border:0}
#footer{background:none}
#footer-text{color:rgba(0,0,0,.6);font-size:.9em}}
@media amzn-kf8{#header,#content,#footnotes,#footer{padding:0}}
</style>
<style>
pre.rouge table td { padding: 5px; }
pre.rouge table pre { margin: 0; }
pre.rouge, pre.rouge .w {
color: #24292f;
background-color: #f6f8fa;
}
pre.rouge .k, pre.rouge .kd, pre.rouge .kn, pre.rouge .kp, pre.rouge .kr, pre.rouge .kt, pre.rouge .kv {
color: #cf222e;
}
pre.rouge .gr {
color: #f6f8fa;
}
pre.rouge .gd {
color: #82071e;
background-color: #ffebe9;
}
pre.rouge .nb {
color: #953800;
}
pre.rouge .nc {
color: #953800;
}
pre.rouge .no {
color: #953800;
}
pre.rouge .nn {
color: #953800;
}
pre.rouge .sr {
color: #116329;
}
pre.rouge .na {
color: #116329;
}
pre.rouge .nt {
color: #116329;
}
pre.rouge .gi {
color: #116329;
background-color: #dafbe1;
}
pre.rouge .ges {
font-weight: bold;
font-style: italic;
}
pre.rouge .kc {
color: #0550ae;
}
pre.rouge .l, pre.rouge .ld, pre.rouge .m, pre.rouge .mb, pre.rouge .mf, pre.rouge .mh, pre.rouge .mi, pre.rouge .il, pre.rouge .mo, pre.rouge .mx {
color: #0550ae;
}
pre.rouge .sb {
color: #0550ae;
}
pre.rouge .bp {
color: #0550ae;
}
pre.rouge .ne {
color: #0550ae;
}
pre.rouge .nl {
color: #0550ae;
}
pre.rouge .py {
color: #0550ae;
}
pre.rouge .nv, pre.rouge .vc, pre.rouge .vg, pre.rouge .vi, pre.rouge .vm {
color: #0550ae;
}
pre.rouge .o, pre.rouge .ow {
color: #0550ae;
}
pre.rouge .gh {
color: #0550ae;
font-weight: bold;
}
pre.rouge .gu {
color: #0550ae;
font-weight: bold;
}
pre.rouge .s, pre.rouge .sa, pre.rouge .sc, pre.rouge .dl, pre.rouge .sd, pre.rouge .s2, pre.rouge .se, pre.rouge .sh, pre.rouge .sx, pre.rouge .s1, pre.rouge .ss {
color: #0a3069;
}
pre.rouge .nd {
color: #8250df;
}
pre.rouge .nf, pre.rouge .fm {
color: #8250df;
}
pre.rouge .err {
color: #f6f8fa;
background-color: #82071e;
}
pre.rouge .c, pre.rouge .ch, pre.rouge .cd, pre.rouge .cm, pre.rouge .cp, pre.rouge .cpf, pre.rouge .c1, pre.rouge .cs {
color: #6e7781;
}
pre.rouge .gl {
color: #6e7781;
}
pre.rouge .gt {
color: #6e7781;
}
pre.rouge .ni {
color: #24292f;
}
pre.rouge .si {
color: #24292f;
}
pre.rouge .ge {
color: #24292f;
font-style: italic;
}
pre.rouge .gs {
color: #24292f;
font-weight: bold;
}
</style>
</head>
<body class="article toc2 toc-left">
<div id="header">
<h1>Boost.Uuid</h1>
<div id="toc" class="toc2">
<div id="toctitle">Table of Contents</div>
<ul class="sectlevel1">
<li><a href="#introduction">Introduction</a></li>
<li><a href="#changes">Revision History</a>
<ul class="sectlevel2">
<li><a href="#changes_changes_in_boost_1_91_0">Changes in Boost 1.91.0</a></li>
<li><a href="#changes_changes_in_boost_1_90_0">Changes in Boost 1.90.0</a></li>
<li><a href="#changes_changes_in_boost_1_87_0">Changes in Boost 1.87.0</a></li>
<li><a href="#changes_changes_in_boost_1_86_0_major_update">Changes in Boost 1.86.0 (<strong>major update</strong>)</a></li>
</ul>
</li>
<li><a href="#configuration">Configuration</a>
<ul class="sectlevel2">
<li><a href="#configuration_instruction_set">Instruction Set</a></li>
<li><a href="#configuration_alignment">Alignment</a></li>
</ul>
</li>
<li><a href="#examples">Examples</a>
<ul class="sectlevel2">
<li><a href="#examples_tagging">Tagging</a></li>
<li><a href="#examples_byte_extraction">Byte Extraction</a></li>
</ul>
</li>
<li><a href="#reference">Reference</a>
<ul class="sectlevel2">
<li><a href="#uuid_all">&lt;boost/uuid.hpp&gt;</a>
<ul class="sectlevel3">
<li><a href="#uuid_all_synopsis">Synopsis</a></li>
</ul>
</li>
<li><a href="#uuid">&lt;boost/uuid/uuid.hpp&gt;</a>
<ul class="sectlevel3">
<li><a href="#uuid_synopsis">Synopsis</a></li>
<li><a href="#uuid_constructors">Constructors</a></li>
<li><a href="#uuid_iteration">Iteration</a></li>
<li><a href="#uuid_data">Data</a></li>
<li><a href="#uuid_size">Size</a></li>
<li><a href="#uuid_is_nil">is_nil</a></li>
<li><a href="#uuid_variant">Variant</a></li>
<li><a href="#uuid_version">Version</a></li>
<li><a href="#uuid_time_based_fields">Time-based Fields</a></li>
<li><a href="#uuid_swap">Swap</a></li>
<li><a href="#uuid_operators">Operators</a></li>
<li><a href="#uuid_free_swap">Free Swap</a></li>
<li><a href="#uuid_hash_value">hash_value</a></li>
<li><a href="#uuid_serialization">Serialization</a></li>
<li><a href="#uuid_stdhash">std::hash</a></li>
</ul>
</li>
<li><a href="#uuid_io">&lt;boost/uuid/uuid_io.hpp&gt;</a>
<ul class="sectlevel3">
<li><a href="#uuid_io_synopsis">Synopsis</a></li>
<li><a href="#uuid_io_stream_insertion">Stream Insertion</a></li>
<li><a href="#uuid_io_stream_extraction">Stream Extraction</a></li>
<li><a href="#uuid_io_to_chars">to_chars</a></li>
<li><a href="#uuid_io_to_string">to_string</a></li>
<li><a href="#uuid_io_from_chars_result">from_chars_result</a></li>
<li><a href="#uuid_io_from_chars">from_chars</a></li>
<li><a href="#uuid_io_uuid_from_string">uuid_from_string</a></li>
</ul>
</li>
<li><a href="#invalid_uuid">&lt;boost/uuid/invalid_uuid.hpp&gt;</a>
<ul class="sectlevel3">
<li><a href="#invalid_uuid_synopsis">Synopsis</a></li>
<li><a href="#invalid_uuid_invalid_uuid">invalid_uuid</a></li>
</ul>
</li>
<li><a href="#generators">&lt;boost/uuid/generators.hpp&gt;</a>
<ul class="sectlevel3">
<li><a href="#generators_synopsis">Synopsis</a></li>
</ul>
</li>
<li><a href="#nil_generator">&lt;boost/uuid/nil_generator.hpp&gt;</a>
<ul class="sectlevel3">
<li><a href="#nil_generator_synopsis">Synopsis</a></li>
<li><a href="#nil_generator_nil_generator">nil_generator</a></li>
<li><a href="#nil_generator_nil_uuid">nil_uuid</a></li>
</ul>
</li>
<li><a href="#string_generator">&lt;boost/uuid/string_generator.hpp&gt;</a>
<ul class="sectlevel3">
<li><a href="#string_generator_synopsis">Synopsis</a></li>
<li><a href="#string_generator_string_generator">string_generator</a></li>
</ul>
</li>
<li><a href="#namespaces">&lt;boost/uuid/namespaces.hpp&gt;</a>
<ul class="sectlevel3">
<li><a href="#namespaces_synopsis">Synopsis</a></li>
<li><a href="#namespaces_namespaces">Namespaces</a></li>
</ul>
</li>
<li><a href="#name_generator_sha1">&lt;boost/uuid/&#8203;name_generator_sha1.hpp&gt;</a>
<ul class="sectlevel3">
<li><a href="#name_generator_sha1_synopsis">Synopsis</a></li>
<li><a href="#name_generator_sha1_name_generator_sha1">name_generator_sha1</a></li>
</ul>
</li>
<li><a href="#name_generator_md5">&lt;boost/uuid/&#8203;name_generator_md5.hpp&gt;</a>
<ul class="sectlevel3">
<li><a href="#name_generator_md5_synopsis">Synopsis</a></li>
<li><a href="#name_generator_md5_name_generator_md5">name_generator_md5</a></li>
</ul>
</li>
<li><a href="#name_generator">&lt;boost/uuid/name_generator.hpp&gt;</a>
<ul class="sectlevel3">
<li><a href="#name_generator_synopsis">Synopsis</a></li>
</ul>
</li>
<li><a href="#basic_random_generator">&lt;boost/uuid/&#8203;basic_random_generator.hpp&gt;</a>
<ul class="sectlevel3">
<li><a href="#basic_random_generator_synopsis">Synopsis</a></li>
<li><a href="#basic_random_generator_basic_random_generator">basic_random_generator</a></li>
</ul>
</li>
<li><a href="#random_generator">&lt;boost/uuid/&#8203;random_generator.hpp&gt;</a>
<ul class="sectlevel3">
<li><a href="#random_generator_synopsis">Synopsis</a></li>
<li><a href="#random_generator_random_generator">random_generator</a></li>
<li><a href="#random_generator_random_generator_mt19937">random_generator_mt19937</a></li>
<li><a href="#random_generator_random_generator_pure">random_generator_pure</a></li>
</ul>
</li>
<li><a href="#uuid_clock">&lt;boost/uuid/uuid_clock.hpp&gt;</a>
<ul class="sectlevel3">
<li><a href="#uuid_clock_synopsis">Synopsis</a></li>
<li><a href="#uuid_clock_now">now</a></li>
<li><a href="#uuid_clock_from_sys">from_sys</a></li>
<li><a href="#uuid_clock_to_sys">to_sys</a></li>
<li><a href="#uuid_clock_from_timestamp">from_timestamp</a></li>
<li><a href="#uuid_clock_to_timestamp">to_timestamp</a></li>
</ul>
</li>
<li><a href="#time_generator_v1">&lt;boost/uuid/&#8203;time_generator_v1.hpp&gt;</a>
<ul class="sectlevel3">
<li><a href="#time_generator_v1_synopsis">Synopsis</a></li>
<li><a href="#time_generator_v1_constructors">Constructors</a></li>
<li><a href="#time_generator_v1_operator">operator()</a></li>
</ul>
</li>
<li><a href="#time_generator_v6">&lt;boost/uuid/&#8203;time_generator_v6.hpp&gt;</a>
<ul class="sectlevel3">
<li><a href="#time_generator_v6_synopsis">Synopsis</a></li>
</ul>
</li>
<li><a href="#time_generator_v7">&lt;boost/uuid/&#8203;time_generator_v7.hpp&gt;</a>
<ul class="sectlevel3">
<li><a href="#time_generator_v7_synopsis">Synopsis</a></li>
<li><a href="#time_generator_v7_constructors">Constructors</a></li>
<li><a href="#time_generator_v7_assignment">Assignment</a></li>
<li><a href="#time_generator_v7_operator">operator()</a></li>
</ul>
</li>
<li><a href="#time_generator">&lt;boost/uuid/time_generator.hpp&gt;</a>
<ul class="sectlevel3">
<li><a href="#time_generator_synopsis">Synopsis</a></li>
</ul>
</li>
<li><a href="#constants">&lt;boost/uuid/constants.hpp&gt;</a>
<ul class="sectlevel3">
<li><a href="#constants_synopsis">Synopsis</a></li>
<li><a href="#constants_constants">Constants</a></li>
</ul>
</li>
<li><a href="#design_notes">Design Notes</a></li>
<li><a href="#acknowledgements">Acknowledgements</a></li>
</ul>
</li>
<li><a href="#copyright">Copyright and License</a></li>
<li><a href="#history">Old Revision History</a>
<ul class="sectlevel2">
<li><a href="#history_boostuuiduuid_hpp">boost/uuid/uuid.hpp</a></li>
<li><a href="#history_boostuuiduuid_io_hpp">boost/uuid/uuid_io.hpp</a></li>
<li><a href="#history_boostuuiddetailsha1_hpp">boost/uuid/detail/sha1.hpp</a></li>
</ul>
</li>
</ul>
</div>
</div>
<div id="content">
<div class="sect1">
<h2 id="introduction"><a class="link" href="#introduction">Introduction</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>A UUID, or universally unique identifier, is intended to uniquely identify information in a distributed environment without significant central coordination.
It can be used to tag objects with very short lifetimes, or to reliably identify very persistent objects across a network.</p>
</div>
<div class="paragraph">
<p>A formal definition for UUID can be found in <a href="https://datatracker.ietf.org/doc/rfc4122/">RFC 4122</a> and <a href="https://datatracker.ietf.org/doc/rfc9562/">RFC 9562</a>.</p>
</div>
<div class="paragraph">
<p>UUIDs have many applications.
Some examples follow: Databases may use UUIDs to identify rows or records in order to ensure that they are unique across different databases, or for publication/subscription services.
Network messages may be identified with a UUID to ensure that different parts of a message are put back together again.
Distributed computing may use UUIDs to identify a remote procedure call.
Transactions and classes involved in serialization may be identified by UUIDs.
Microsoft&#8217;s component object model (COM) uses UUIDs to distinguish different software component interfaces.
UUIDs are inserted into documents from Microsoft Office programs.
UUIDs identify audio or video streams in the Advanced Systems Format (ASF).
UUIDs are also a basis for OIDs (object identifiers), and URNs (uniform resource name).</p>
</div>
<div class="paragraph">
<p>An attractive feature of UUIDs when compared to alternatives is their relative small size, of 128 bits, or 16 bytes.
Another is that the creation of UUIDs does not require a centralized authority.</p>
</div>
<div class="paragraph">
<p>When UUIDs are generated by one of the defined mechanisms, they are either guaranteed to be unique, different from all other generated UUIDs
(that is, it has never been generated before and it will never be generated again), or it is extremely likely to be unique (depending on the mechanism).</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="changes"><a class="link" href="#changes">Revision History</a></h2>
<div class="sectionbody">
<div class="sect2">
<h3 id="changes_changes_in_boost_1_91_0"><a class="link" href="#changes_changes_in_boost_1_91_0">Changes in Boost 1.91.0</a></h3>
<div class="ulist">
<ul>
<li>
<p>Added <code>from_chars</code> to <code>boost/uuid/uuid_io.hpp</code>.</p>
</li>
<li>
<p>Added a <code>noexcept</code> <code>operator()</code> overload to <code>string_generator</code>.</p>
</li>
<li>
<p><code>string_generator</code> now supports the Unicode character types in addition to <code>char</code> and <code>wchar_t</code>.</p>
</li>
<li>
<p>Most <code>uuid</code> accessors, operations, and <code>to_chars</code> are now <code>constexpr</code> when possible (on C&#43;&#43;14 and higher and on recent compilers).</p>
</li>
<li>
<p>Added SIMD implementation of <code>to_chars</code>, which can offer up to 5.5x performance improvement in UUID formatting. (Andrey Semashev)</p>
</li>
<li>
<p>Added SIMD implementation of <code>from_chars</code>, which can offer up to 13x performance improvement in UUID parsing. (Andrey Semashev)</p>
</li>
<li>
<p>Added <code>uuid_from_string</code> to <code>boost/uuid/uuid_io.hpp</code>.</p>
</li>
<li>
<p>Added a dedicated <code>invalid_uuid</code> exception class, derived from <code>std::runtime_error</code> for backward compatibility.</p>
</li>
</ul>
</div>
</div>
<div class="sect2">
<h3 id="changes_changes_in_boost_1_90_0"><a class="link" href="#changes_changes_in_boost_1_90_0">Changes in Boost 1.90.0</a></h3>
<div class="ulist">
<ul>
<li>
<p><code>string_generator</code> is now <code>constexpr</code> on C&#43;&#43;14 and higher.</p>
</li>
<li>
<p>Added header <code>boost/uuid/constants.hpp</code>.</p>
</li>
<li>
<p>Renamed <code>boost/uuid/uuid_generators.hpp</code> to <code>boost/uuid/generators.hpp</code>. The old name is retained for compatibility.</p>
</li>
</ul>
</div>
</div>
<div class="sect2">
<h3 id="changes_changes_in_boost_1_87_0"><a class="link" href="#changes_changes_in_boost_1_87_0">Changes in Boost 1.87.0</a></h3>
<div class="ulist">
<ul>
<li>
<p>Restored the ability to construct a <code>constexpr uuid</code> that was inadvertently lost in 1.86.</p>
</li>
</ul>
</div>
</div>
<div class="sect2">
<h3 id="changes_changes_in_boost_1_86_0_major_update"><a class="link" href="#changes_changes_in_boost_1_86_0_major_update">Changes in Boost 1.86.0 (<strong>major update</strong>)</a></h3>
<div class="ulist">
<ul>
<li>
<p>C&#43;&#43;03 is no longer supported, a C&#43;&#43;11 compiler is required.
This includes GCC 4.8 or later, MSVC 14.0 or later, and MinGW-w64.</p>
</li>
<li>
<p>Removed direct dependencies on Core, Io, Move, NumericConversion, StaticAssert, TTI, Random, ContainerHash.
The library now only has five Boost dependencies in total (as opposed to 39 in Boost 1.85.)</p>
</li>
<li>
<p>Moved <code>std::hash</code> support from <code>uuid_hash.hpp</code> to <code>uuid.hpp</code>.</p>
</li>
<li>
<p>Moved serialization support from <code>uuid_serialize.hpp</code> to <code>uuid.hpp</code>.</p>
</li>
<li>
<p>Improved the quality and speed of <code>hash_value</code>.</p>
</li>
<li>
<p>Added <code>operator&lt;=&gt;</code>.</p>
</li>
<li>
<p>The generic (non-SIMD) implementations of <code>is_nil</code>, <code>operator==</code>, <code>operator&lt;</code>, <code>swap</code>, and <code>operator&lt;=&gt;</code> now use <code>__uint128_t</code> operations when that type is available, and <code>uint64_t</code> operations otherwise.</p>
</li>
<li>
<p>Added convenience header <code>&lt;boost/uuid.hpp&gt;</code>.</p>
</li>
<li>
<p>Removed platform-specific entropy providers; the implementation now uses <code>std::random_device</code> as the source of entropy.</p>
</li>
<li>
<p><code>basic_random_generator</code> has been moved to its own header, <code>boost/uuid/basic_random_generator.hpp</code>.</p>
</li>
<li>
<p><code>basic_random_generator</code> has been changed to hold the underlying generator by value, to avoid dynamic allocation and restore copyability.</p>
</li>
<li>
<p><code>random_generator_pure</code> is now an alias for <code>basic_random_generator&lt;std::random_device&gt;</code> and its use is discouraged.</p>
</li>
<li>
<p><code>random_generator_mt19937</code> is now an alias for <code>basic_random_generator&lt;std::mt19937&gt;</code> and its use is discouraged.</p>
</li>
<li>
<p><code>random_generator</code> now uses a cryptographically strong pseudorandom number generator (ChaCha20/12), seeded with entropy from <code>std::random_device</code>.
It&#8217;s the recommended way to generate version 4 UUIDs.</p>
</li>
<li>
<p>Since <code>basic_name_generator</code> had only two valid instantiations, both of which are already provided (<code>name_generator_md5</code> and <code>name_generator_sha1</code>),
it was made a private implementation detail and is no longer part of the public interface.</p>
</li>
<li>
<p>While <code>name_generator</code> and <code>name_generator_latest</code> are still provided for compatibility, their use is no longer encouraged.</p>
</li>
<li>
<p>The name generators now accept Unicode strings; these are converted to UTF-8 before hashing.</p>
</li>
<li>
<p>The definitions of the well-known RFC 4122 namespaces have been moved to their own header, <code>boost/uuid/namespaces.hpp</code>.</p>
</li>
<li>
<p>Added <code>time_generator_v1</code>, a generator that produces version 1 time-based UUIDs.</p>
</li>
<li>
<p>Added <code>time_generator_v6</code>, a generator that produces version 6 time-based UUIDs.</p>
</li>
<li>
<p>Added <code>time_generator_v7</code>, a generator that produces version 7 time-based UUIDs.</p>
</li>
<li>
<p>Added <code>uuid_clock</code>, a <code>&lt;chrono&gt;</code>-compatible clock with an epoch and a resolution as specified in RFC 4122.</p>
</li>
<li>
<p>Accessors for the timestamp, the time point, the clock sequence, and the node identifier have been added to <code>uuid</code>.</p>
</li>
<li>
<p>Improved the <code>what()</code> strings of the <code>std::runtime_error</code> exceptions thrown by <code>string_generator</code>.</p>
</li>
<li>
<p>Added overloads of <code>to_chars</code> taking <code>Ch* first, Ch* last</code> and <code>Ch(&amp;)[N]</code>.</p>
</li>
<li>
<p>The default constructor of <code>uuid</code> now produces a nil UUID instead of an uninitialized one.</p>
</li>
<li>
<p><code>u.data()</code>, where <code>u</code> is of type <code>uuid</code>, now returns a pointer to the first <code>uint8_t</code> of the representation (same as <code>u.begin()</code>.)
For backward compatibility, <code>data</code> is a function object with <code>operator()</code>, rather than a member function, which allows most existing uses of <code>data</code> as a public member to remain valid, if no longer encouraged.</p>
</li>
<li>
<p><code>uuid</code> now has the same alignment as <code>std::uint64_t</code>. It was previously unaligned (had alignment of 1, same as <code>std::uint8_t</code>.) To restore the 1.85 behavior, define the macro <code>BOOST_UUID_DISABLE_ALIGNMENT</code>.</p>
</li>
</ul>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="configuration"><a class="link" href="#configuration">Configuration</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>The library does not require building or any special configuration to be used.
However, there are a few options that can be enabled by defining macros prior to including library headers.</p>
</div>
<div class="sect2">
<h3 id="configuration_instruction_set"><a class="link" href="#configuration_instruction_set">Instruction Set</a></h3>
<table class="tableblock frame-all grid-all fit-content">
<colgroup>
<col>
<col>
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Macro</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>BOOST_UUID_NO_SIMD</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">If defined, disables any optimizations for <a href="https://en.wikipedia.org/wiki/SIMD">SIMD</a>-enabled processors.
Generic versions of algorithms will be used instead.
This may result in suboptimal performance.
By default, optimized algorithms are used, when the library is able to detect the availability of SIMD extensions at compile time.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>BOOST_UUID_USE_SSE2</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">If defined, enables optimizations for <a href="https://en.wikipedia.org/wiki/SSE2">SSE2</a> extensions available in x86 processors.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>BOOST_UUID_USE_SSE3</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">If defined, enables optimizations for <a href="https://en.wikipedia.org/wiki/SSE3">SSE3</a> extensions available in x86 processors.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>BOOST_UUID_USE_SSSE3</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">If defined, enables optimizations for <a href="https://en.wikipedia.org/wiki/SSSE3">SSSE3</a> extensions available in x86 processors.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>BOOST_UUID_USE_SSE41</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">If defined, enables optimizations for <a href="https://en.wikipedia.org/wiki/SSE4#SSE4.1">SSE4.1</a> extensions available in x86 processors.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>BOOST_UUID_USE_AVX</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">If defined, enables optimizations for <a href="https://en.wikipedia.org/wiki/Advanced_Vector_Extensions">AVX</a> extensions available in x86 processors.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>BOOST_UUID_USE_AVX2</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">If defined, enables optimizations for <a href="https://en.wikipedia.org/wiki/Advanced_Vector_Extensions#Advanced_Vector_Extensions_2">AVX2</a> extensions available in x86 processors.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>BOOST_UUID_USE_AVX512_V1</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">If defined, enables optimizations for <a href="https://en.wikipedia.org/wiki/AVX-512">AVX-512</a> F, VL, CD, BW and DQ extensions available in x86 processors (e.g. in Intel Skylake-X).</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>BOOST_UUID_USE_AVX10_1</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">If defined, enables optimizations for <a href="https://en.wikipedia.org/wiki/AVX-512">AVX-512</a> and <a href="https://en.wikipedia.org/wiki/Advanced_Vector_Extensions#AVX10">AVX10.1</a> extensions available in x86 processors.
When defined by the user, this macro indicates support for the full set of instructions defined in AVX10.1.
When auto-detected by the library, this macro may be defined even when not all AVX10.1 subsets are enabled, but rather when the detected subset is sufficient for the library.</p></td>
</tr>
</tbody>
</table>
<div class="paragraph">
<p>By default the library attempts to detect the availability of SIMD extensions in the target CPU at compile time and automatically defines the appropriate macros if succeeded.
The <code>BOOST_UUID_USE_SSE*</code> and <code>BOOST_UUID_USE_AVX*</code> macros can be defined by users, if auto-detection fails and it is known that the target CPU will have the extension.
Do not enable these extensions unless you&#8217;re certain that they will always be available on any machine that will run your program.
The library performs no run time checks, so if an extension is missing, the program will likely crash.
Note that enabling more advanced extensions implies that more basic ones are also available.</p>
</div>
</div>
<div class="sect2">
<h3 id="configuration_alignment"><a class="link" href="#configuration_alignment">Alignment</a></h3>
<table class="tableblock frame-all grid-all fit-content">
<colgroup>
<col>
<col>
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Macro</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>BOOST_UUID_DISABLE_ALIGNMENT</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">If defined, leaves <code>uuid</code> unaligned (alignment of 1, same as <code>std::uint8_t</code>). This was the behavior before release 1.86.</p></td>
</tr>
</tbody>
</table>
<div class="paragraph">
<p>By default, <code>uuid</code> has the same alignment as <code>std::uint64_t</code>. Define <code>BOOST_UUID_DISABLE_ALIGNMENT</code> to leave it unaligned.</p>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="examples"><a class="link" href="#examples">Examples</a></h2>
<div class="sectionbody">
<div class="sect2">
<h3 id="examples_tagging"><a class="link" href="#examples_tagging">Tagging</a></h3>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="c1">// example of tagging an object with a uuid</span>
<span class="c1">// see boost/libs/uuid/test/test_tagging.cpp</span>
<span class="cp">#include</span> <span class="cpf">&lt;boost/uuid/uuid.hpp&gt;</span><span class="cp">
#include</span> <span class="cpf">&lt;boost/uuid/generators.hpp&gt;</span><span class="cp">
</span>
<span class="k">class</span> <span class="nc">object</span>
<span class="p">{</span>
<span class="nl">public:</span>
<span class="n">object</span><span class="p">()</span>
<span class="o">:</span> <span class="n">tag</span><span class="p">(</span><span class="n">boost</span><span class="o">::</span><span class="n">uuids</span><span class="o">::</span><span class="n">random_generator</span><span class="p">()())</span>
<span class="p">,</span> <span class="n">state</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
<span class="p">{}</span>
<span class="k">explicit</span> <span class="nf">object</span><span class="p">(</span><span class="kt">int</span> <span class="n">state</span><span class="p">)</span>
<span class="o">:</span> <span class="n">tag</span><span class="p">(</span><span class="n">boost</span><span class="o">::</span><span class="n">uuids</span><span class="o">::</span><span class="n">random_generator</span><span class="p">()())</span>
<span class="p">,</span> <span class="n">state</span><span class="p">(</span><span class="n">state</span><span class="p">)</span>
<span class="p">{}</span>
<span class="n">object</span><span class="p">(</span><span class="n">object</span> <span class="k">const</span><span class="o">&amp;</span> <span class="n">rhs</span><span class="p">)</span>
<span class="o">:</span> <span class="n">tag</span><span class="p">(</span><span class="n">rhs</span><span class="p">.</span><span class="n">tag</span><span class="p">)</span>
<span class="p">,</span> <span class="n">state</span><span class="p">(</span><span class="n">rhs</span><span class="p">.</span><span class="n">state</span><span class="p">)</span>
<span class="p">{}</span>
<span class="kt">bool</span> <span class="k">operator</span><span class="o">==</span><span class="p">(</span><span class="n">object</span> <span class="k">const</span><span class="o">&amp;</span> <span class="n">rhs</span><span class="p">)</span> <span class="k">const</span> <span class="p">{</span>
<span class="k">return</span> <span class="n">tag</span> <span class="o">==</span> <span class="n">rhs</span><span class="p">.</span><span class="n">tag</span><span class="p">;</span>
<span class="p">}</span>
<span class="n">object</span><span class="o">&amp;</span> <span class="k">operator</span><span class="o">=</span><span class="p">(</span><span class="n">object</span> <span class="k">const</span><span class="o">&amp;</span> <span class="n">rhs</span><span class="p">)</span> <span class="p">{</span>
<span class="n">tag</span> <span class="o">=</span> <span class="n">rhs</span><span class="p">.</span><span class="n">tag</span><span class="p">;</span>
<span class="n">state</span> <span class="o">=</span> <span class="n">rhs</span><span class="p">.</span><span class="n">state</span><span class="p">;</span>
<span class="p">}</span>
<span class="kt">int</span> <span class="n">get_state</span><span class="p">()</span> <span class="k">const</span> <span class="p">{</span> <span class="k">return</span> <span class="n">state</span><span class="p">;</span> <span class="p">}</span>
<span class="kt">void</span> <span class="nf">set_state</span><span class="p">(</span><span class="kt">int</span> <span class="n">new_state</span><span class="p">)</span> <span class="p">{</span> <span class="n">state</span> <span class="o">=</span> <span class="n">new_state</span><span class="p">;</span> <span class="p">}</span>
<span class="k">private</span><span class="o">:</span>
<span class="n">boost</span><span class="o">::</span><span class="n">uuids</span><span class="o">::</span><span class="n">uuid</span> <span class="n">tag</span><span class="p">;</span>
<span class="kt">int</span> <span class="n">state</span><span class="p">;</span>
<span class="p">};</span>
<span class="n">object</span> <span class="nf">o1</span><span class="p">(</span><span class="mi">1</span><span class="p">);</span>
<span class="n">object</span> <span class="n">o2</span> <span class="o">=</span> <span class="n">o1</span><span class="p">;</span>
<span class="n">o2</span><span class="p">.</span><span class="n">set_state</span><span class="p">(</span><span class="mi">2</span><span class="p">);</span>
<span class="n">assert</span><span class="p">(</span><span class="n">o1</span> <span class="o">==</span> <span class="n">o2</span><span class="p">);</span>
<span class="n">object</span> <span class="nf">o3</span><span class="p">(</span><span class="mi">3</span><span class="p">);</span>
<span class="n">assert</span><span class="p">(</span><span class="n">o1</span> <span class="o">!=</span> <span class="n">o3</span><span class="p">);</span>
<span class="n">assert</span><span class="p">(</span><span class="n">o2</span> <span class="o">!=</span> <span class="n">o3</span><span class="p">);</span></code></pre>
</div>
</div>
</div>
<div class="sect2">
<h3 id="examples_byte_extraction"><a class="link" href="#examples_byte_extraction">Byte Extraction</a></h3>
<div class="paragraph">
<p>It is sometimes useful to get at the 16 bytes of a <code>uuid</code> directly. Typical use is as follows:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="n">boost</span><span class="o">::</span><span class="n">uuids</span><span class="o">::</span><span class="n">uuid</span> <span class="n">u</span><span class="p">;</span>
<span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o">&lt;</span><span class="n">std</span><span class="o">::</span><span class="kt">uint8_t</span><span class="o">&gt;</span> <span class="n">v</span><span class="p">(</span><span class="n">u</span><span class="p">.</span><span class="n">size</span><span class="p">());</span>
<span class="n">std</span><span class="o">::</span><span class="n">copy</span><span class="p">(</span><span class="n">u</span><span class="p">.</span><span class="n">begin</span><span class="p">(),</span> <span class="n">u</span><span class="p">.</span><span class="n">end</span><span class="p">(),</span> <span class="n">v</span><span class="p">.</span><span class="n">begin</span><span class="p">());</span></code></pre>
</div>
</div>
<div class="paragraph">
<p>Note: <code>boost::uuids::uuid::size()</code> always returns 16.</p>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="reference"><a class="link" href="#reference">Reference</a></h2>
<div class="sectionbody">
<div class="sect2">
<h3 id="uuid_all"><a class="link" href="#uuid_all">&lt;boost/uuid.hpp&gt;</a></h3>
<div class="paragraph">
<p>This convenience header makes the entire library available.</p>
</div>
<div class="sect3">
<h4 id="uuid_all_synopsis"><a class="link" href="#uuid_all_synopsis">Synopsis</a></h4>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="cp">#include</span> <span class="cpf">&lt;boost/uuid/uuid.hpp&gt;</span><span class="cp">
#include</span> <span class="cpf">&lt;boost/uuid/uuid_io.hpp&gt;</span><span class="cp">
#include</span> <span class="cpf">&lt;boost/uuid/generators.hpp&gt;</span><span class="cp">
#include</span> <span class="cpf">&lt;boost/uuid/constants.hpp&gt;</span></code></pre>
</div>
</div>
</div>
</div>
<div class="sect2">
<h3 id="uuid"><a class="link" href="#uuid">&lt;boost/uuid/uuid.hpp&gt;</a></h3>
<div class="sect3">
<h4 id="uuid_synopsis"><a class="link" href="#uuid_synopsis">Synopsis</a></h4>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="k">namespace</span> <span class="n">boost</span> <span class="p">{</span>
<span class="k">namespace</span> <span class="n">uuids</span> <span class="p">{</span>
<span class="k">class</span> <span class="nc">uuid</span>
<span class="p">{</span>
<span class="nl">private:</span>
<span class="n">std</span><span class="o">::</span><span class="kt">uint8_t</span> <span class="n">data_</span><span class="p">[</span> <span class="mi">16</span> <span class="p">]</span> <span class="o">=</span> <span class="p">{};</span> <span class="c1">// exposition only</span>
<span class="k">public</span><span class="o">:</span>
<span class="c1">// constructors</span>
<span class="k">constexpr</span> <span class="n">uuid</span><span class="p">()</span> <span class="o">=</span> <span class="k">default</span><span class="p">;</span>
<span class="k">constexpr</span> <span class="nf">uuid</span><span class="p">(</span> <span class="n">std</span><span class="o">::</span><span class="kt">uint8_t</span> <span class="k">const</span> <span class="p">(</span><span class="o">&amp;</span><span class="n">r</span><span class="p">)[</span> <span class="mi">16</span> <span class="p">]</span> <span class="p">);</span>
<span class="c1">// iteration</span>
<span class="k">using</span> <span class="n">value_type</span> <span class="o">=</span> <span class="n">std</span><span class="o">::</span><span class="kt">uint8_t</span><span class="p">;</span>
<span class="k">using</span> <span class="n">reference</span> <span class="o">=</span> <span class="n">std</span><span class="o">::</span><span class="kt">uint8_t</span><span class="o">&amp;</span><span class="p">;</span>
<span class="k">using</span> <span class="n">const_reference</span> <span class="o">=</span> <span class="n">std</span><span class="o">::</span><span class="kt">uint8_t</span> <span class="k">const</span><span class="o">&amp;</span><span class="p">;</span>
<span class="k">using</span> <span class="n">iterator</span> <span class="o">=</span> <span class="n">std</span><span class="o">::</span><span class="kt">uint8_t</span><span class="o">*</span><span class="p">;</span>
<span class="k">using</span> <span class="n">const_iterator</span> <span class="o">=</span> <span class="n">std</span><span class="o">::</span><span class="kt">uint8_t</span> <span class="k">const</span><span class="o">*</span><span class="p">;</span>
<span class="k">using</span> <span class="n">size_type</span> <span class="o">=</span> <span class="n">std</span><span class="o">::</span><span class="kt">size_t</span><span class="p">;</span>
<span class="k">using</span> <span class="n">difference_type</span> <span class="o">=</span> <span class="n">std</span><span class="o">::</span><span class="kt">ptrdiff_t</span><span class="p">;</span>
<span class="k">constexpr</span> <span class="n">iterator</span> <span class="n">begin</span><span class="p">()</span> <span class="k">noexcept</span><span class="p">;</span>
<span class="k">constexpr</span> <span class="n">iterator</span> <span class="n">end</span><span class="p">()</span> <span class="k">noexcept</span><span class="p">;</span>
<span class="k">constexpr</span> <span class="n">const_iterator</span> <span class="n">begin</span><span class="p">()</span> <span class="k">const</span> <span class="k">noexcept</span><span class="p">;</span>
<span class="k">constexpr</span> <span class="n">const_iterator</span> <span class="n">end</span><span class="p">()</span> <span class="k">const</span> <span class="k">noexcept</span><span class="p">;</span>
<span class="c1">// data</span>
<span class="k">constexpr</span> <span class="n">std</span><span class="o">::</span><span class="kt">uint8_t</span><span class="o">*</span> <span class="n">data</span><span class="p">()</span> <span class="k">noexcept</span><span class="p">;</span>
<span class="k">constexpr</span> <span class="n">std</span><span class="o">::</span><span class="kt">uint8_t</span> <span class="k">const</span><span class="o">*</span> <span class="n">data</span><span class="p">()</span> <span class="k">const</span> <span class="k">noexcept</span><span class="p">;</span>
<span class="c1">// size</span>
<span class="k">constexpr</span> <span class="n">size_type</span> <span class="n">size</span><span class="p">()</span> <span class="k">const</span> <span class="k">noexcept</span><span class="p">;</span>
<span class="k">static</span> <span class="k">constexpr</span> <span class="n">size_type</span> <span class="n">static_size</span><span class="p">()</span> <span class="k">noexcept</span><span class="p">;</span>
<span class="c1">// is_nil</span>
<span class="k">constexpr</span> <span class="kt">bool</span> <span class="n">is_nil</span><span class="p">()</span> <span class="k">const</span> <span class="k">noexcept</span><span class="p">;</span>
<span class="c1">// variant</span>
<span class="k">enum</span> <span class="n">variant_type</span>
<span class="p">{</span>
<span class="n">variant_ncs</span><span class="p">,</span> <span class="c1">// NCS backward compatibility</span>
<span class="n">variant_rfc_4122</span><span class="p">,</span> <span class="c1">// defined in RFC 4122 document</span>
<span class="n">variant_microsoft</span><span class="p">,</span> <span class="c1">// Microsoft Corporation backward compatibility</span>
<span class="n">variant_future</span> <span class="c1">// future definition</span>
<span class="p">};</span>
<span class="k">constexpr</span> <span class="n">variant_type</span> <span class="n">variant</span><span class="p">()</span> <span class="k">const</span> <span class="k">noexcept</span><span class="p">;</span>
<span class="c1">// version</span>
<span class="k">enum</span> <span class="n">version_type</span>
<span class="p">{</span>
<span class="n">version_unknown</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span>
<span class="n">version_time_based</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span>
<span class="n">version_dce_security</span> <span class="o">=</span> <span class="mi">2</span><span class="p">,</span>
<span class="n">version_name_based_md5</span> <span class="o">=</span> <span class="mi">3</span><span class="p">,</span>
<span class="n">version_random_number_based</span> <span class="o">=</span> <span class="mi">4</span><span class="p">,</span>
<span class="n">version_name_based_sha1</span> <span class="o">=</span> <span class="mi">5</span><span class="p">,</span>
<span class="n">version_time_based_v6</span> <span class="o">=</span> <span class="mi">6</span><span class="p">,</span>
<span class="n">version_time_based_v7</span> <span class="o">=</span> <span class="mi">7</span><span class="p">,</span>
<span class="n">version_custom_v8</span> <span class="o">=</span> <span class="mi">8</span>
<span class="p">};</span>
<span class="k">constexpr</span> <span class="n">version_type</span> <span class="n">version</span><span class="p">()</span> <span class="k">const</span> <span class="k">noexcept</span><span class="p">;</span>
<span class="c1">// time-based fields</span>
<span class="k">using</span> <span class="n">timestamp_type</span> <span class="o">=</span> <span class="n">std</span><span class="o">::</span><span class="kt">uint64_t</span><span class="p">;</span>
<span class="k">using</span> <span class="n">clock_seq_type</span> <span class="o">=</span> <span class="n">std</span><span class="o">::</span><span class="kt">uint16_t</span><span class="p">;</span>
<span class="k">using</span> <span class="n">node_type</span> <span class="o">=</span> <span class="n">std</span><span class="o">::</span><span class="n">array</span><span class="o">&lt;</span><span class="n">std</span><span class="o">::</span><span class="kt">uint8_t</span><span class="p">,</span> <span class="mi">6</span><span class="o">&gt;</span><span class="p">;</span>
<span class="k">constexpr</span> <span class="n">timestamp_type</span> <span class="n">timestamp_v1</span><span class="p">()</span> <span class="k">const</span> <span class="k">noexcept</span><span class="p">;</span>
<span class="n">uuid_clock</span><span class="o">::</span><span class="n">time_point</span> <span class="n">time_point_v1</span><span class="p">()</span> <span class="k">const</span> <span class="k">noexcept</span><span class="p">;</span>
<span class="k">constexpr</span> <span class="n">timestamp_type</span> <span class="n">timestamp_v6</span><span class="p">()</span> <span class="k">const</span> <span class="k">noexcept</span><span class="p">;</span>
<span class="n">uuid_clock</span><span class="o">::</span><span class="n">time_point</span> <span class="n">time_point_v6</span><span class="p">()</span> <span class="k">const</span> <span class="k">noexcept</span><span class="p">;</span>
<span class="k">constexpr</span> <span class="n">timestamp_type</span> <span class="n">timestamp_v7</span><span class="p">()</span> <span class="k">const</span> <span class="k">noexcept</span><span class="p">;</span>
<span class="n">std</span><span class="o">::</span><span class="n">chrono</span><span class="o">::</span><span class="n">time_point</span><span class="o">&lt;</span><span class="n">std</span><span class="o">::</span><span class="n">chrono</span><span class="o">::</span><span class="n">system_clock</span><span class="p">,</span> <span class="n">std</span><span class="o">::</span><span class="n">chrono</span><span class="o">::</span><span class="n">milliseconds</span><span class="o">&gt;</span>
<span class="n">time_point_v7</span><span class="p">()</span> <span class="k">const</span> <span class="k">noexcept</span><span class="p">;</span>
<span class="k">constexpr</span> <span class="n">clock_seq_type</span> <span class="n">clock_seq</span><span class="p">()</span> <span class="k">const</span> <span class="k">noexcept</span><span class="p">;</span>
<span class="k">constexpr</span> <span class="n">node_type</span> <span class="n">node_identifier</span><span class="p">()</span> <span class="k">const</span> <span class="k">noexcept</span><span class="p">;</span>
<span class="c1">// swap</span>
<span class="k">constexpr</span> <span class="kt">void</span> <span class="n">swap</span><span class="p">(</span> <span class="n">uuid</span><span class="o">&amp;</span> <span class="n">rhs</span> <span class="p">)</span> <span class="k">noexcept</span><span class="p">;</span>
<span class="p">};</span>
<span class="c1">// operators</span>
<span class="k">constexpr</span> <span class="kt">bool</span> <span class="k">operator</span><span class="o">==</span><span class="p">(</span> <span class="n">uuid</span> <span class="k">const</span><span class="o">&amp;</span> <span class="n">lhs</span><span class="p">,</span> <span class="n">uuid</span> <span class="k">const</span><span class="o">&amp;</span> <span class="n">rhs</span> <span class="p">)</span> <span class="k">noexcept</span><span class="p">;</span>
<span class="k">constexpr</span> <span class="kt">bool</span> <span class="k">operator</span><span class="o">!=</span><span class="p">(</span> <span class="n">uuid</span> <span class="k">const</span><span class="o">&amp;</span> <span class="n">lhs</span><span class="p">,</span> <span class="n">uuid</span> <span class="k">const</span><span class="o">&amp;</span> <span class="n">rhs</span> <span class="p">)</span> <span class="k">noexcept</span><span class="p">;</span>
<span class="k">constexpr</span> <span class="kt">bool</span> <span class="k">operator</span><span class="o">&lt;</span><span class="p">(</span> <span class="n">uuid</span> <span class="k">const</span><span class="o">&amp;</span> <span class="n">lhs</span><span class="p">,</span> <span class="n">uuid</span> <span class="k">const</span><span class="o">&amp;</span> <span class="n">rhs</span> <span class="p">)</span> <span class="k">noexcept</span><span class="p">;</span>
<span class="k">constexpr</span> <span class="kt">bool</span> <span class="k">operator</span><span class="o">&gt;</span><span class="p">(</span> <span class="n">uuid</span> <span class="k">const</span><span class="o">&amp;</span> <span class="n">lhs</span><span class="p">,</span> <span class="n">uuid</span> <span class="k">const</span><span class="o">&amp;</span> <span class="n">rhs</span> <span class="p">)</span> <span class="k">noexcept</span><span class="p">;</span>
<span class="k">constexpr</span> <span class="kt">bool</span> <span class="k">operator</span><span class="o">&lt;=</span><span class="p">(</span> <span class="n">uuid</span> <span class="k">const</span><span class="o">&amp;</span> <span class="n">lhs</span><span class="p">,</span> <span class="n">uuid</span> <span class="k">const</span><span class="o">&amp;</span> <span class="n">rhs</span> <span class="p">)</span> <span class="k">noexcept</span><span class="p">;</span>
<span class="k">constexpr</span> <span class="kt">bool</span> <span class="k">operator</span><span class="o">&gt;=</span><span class="p">(</span> <span class="n">uuid</span> <span class="k">const</span><span class="o">&amp;</span> <span class="n">lhs</span><span class="p">,</span> <span class="n">uuid</span> <span class="k">const</span><span class="o">&amp;</span> <span class="n">rhs</span> <span class="p">)</span> <span class="k">noexcept</span><span class="p">;</span>
<span class="k">constexpr</span> <span class="n">std</span><span class="o">::</span><span class="n">strong_ordering</span> <span class="k">operator</span><span class="o">&lt;=&gt;</span><span class="p">(</span> <span class="n">uuid</span> <span class="k">const</span><span class="o">&amp;</span> <span class="n">lhs</span><span class="p">,</span> <span class="n">uuid</span> <span class="k">const</span><span class="o">&amp;</span> <span class="n">rhs</span> <span class="p">)</span> <span class="k">noexcept</span><span class="p">;</span>
<span class="c1">// free swap</span>
<span class="k">constexpr</span> <span class="kt">void</span> <span class="n">swap</span><span class="p">(</span> <span class="n">uuid</span><span class="o">&amp;</span> <span class="n">lhs</span><span class="p">,</span> <span class="n">uuid</span><span class="o">&amp;</span> <span class="n">rhs</span> <span class="p">)</span> <span class="k">noexcept</span><span class="p">;</span>
<span class="c1">// hash_value</span>
<span class="k">constexpr</span> <span class="n">std</span><span class="o">::</span><span class="kt">size_t</span> <span class="n">hash_value</span><span class="p">(</span> <span class="n">uuid</span> <span class="k">const</span><span class="o">&amp;</span> <span class="n">u</span> <span class="p">)</span> <span class="k">noexcept</span><span class="p">;</span>
<span class="p">}}</span> <span class="c1">// namespace boost::uuids</span>
<span class="c1">// Boost.Serialization support</span>
<span class="n">BOOST_CLASS_IMPLEMENTATION</span><span class="p">(</span><span class="n">boost</span><span class="o">::</span><span class="n">uuids</span><span class="o">::</span><span class="n">uuid</span><span class="p">,</span> <span class="n">boost</span><span class="o">::</span><span class="n">serialization</span><span class="o">::</span><span class="n">primitive_type</span><span class="p">)</span>
<span class="c1">// std::hash support</span>
<span class="k">template</span><span class="o">&lt;</span><span class="p">&gt;</span> <span class="k">struct</span> <span class="nc">std</span><span class="o">::</span><span class="n">hash</span><span class="o">&lt;</span><span class="n">boost</span><span class="o">::</span><span class="n">uuids</span><span class="o">::</span><span class="n">uuid</span><span class="o">&gt;</span><span class="p">;</span></code></pre>
</div>
</div>
</div>
<div class="sect3">
<h4 id="uuid_constructors"><a class="link" href="#uuid_constructors">Constructors</a></h4>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="k">constexpr</span> <span class="n">uuid</span><span class="p">()</span> <span class="o">=</span> <span class="k">default</span><span class="p">;</span></code></pre>
</div>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Effects: </dt>
<dd>
<p>Zero-initializes <code>data_</code>.</p>
</dd>
<dt class="hdlist1">Postconditions: </dt>
<dd>
<p><code>is_nil()</code>.</p>
</dd>
</dl>
</div>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="k">constexpr</span> <span class="nf">uuid</span><span class="p">(</span> <span class="n">std</span><span class="o">::</span><span class="kt">uint8_t</span> <span class="k">const</span> <span class="p">(</span><span class="o">&amp;</span><span class="n">r</span><span class="p">)[</span> <span class="mi">16</span> <span class="p">]</span> <span class="p">);</span></code></pre>
</div>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Effects: </dt>
<dd>
<p>Initializes the elements of <code>data_</code> from the corresponding elements of <code>r</code>.</p>
</dd>
</dl>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<div class="title">Note</div>
</td>
<td class="content">
This constructor is only <code>constexpr</code> under C&#43;&#43;14 or later.
</td>
</tr>
</table>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Example: </dt>
<dd>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="n">uuid</span> <span class="n">dns</span> <span class="o">=</span> <span class="p">{{</span> <span class="mh">0x6b</span><span class="p">,</span> <span class="mh">0xa7</span><span class="p">,</span> <span class="mh">0xb8</span><span class="p">,</span> <span class="mh">0x10</span><span class="p">,</span> <span class="mh">0x9d</span><span class="p">,</span> <span class="mh">0xad</span><span class="p">,</span> <span class="mh">0x11</span><span class="p">,</span> <span class="mh">0xd1</span><span class="p">,</span> <span class="mh">0x80</span><span class="p">,</span> <span class="mh">0xb4</span><span class="p">,</span> <span class="mh">0x00</span><span class="p">,</span> <span class="mh">0xc0</span><span class="p">,</span> <span class="mh">0x4f</span><span class="p">,</span> <span class="mh">0xd4</span><span class="p">,</span> <span class="mh">0x30</span><span class="p">,</span> <span class="mh">0xc8</span> <span class="p">}};</span></code></pre>
</div>
</div>
</dd>
</dl>
</div>
</div>
<div class="sect3">
<h4 id="uuid_iteration"><a class="link" href="#uuid_iteration">Iteration</a></h4>
<div class="paragraph">
<p>Both constant and mutable iterators are provided.</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="k">constexpr</span> <span class="n">iterator</span> <span class="n">begin</span><span class="p">()</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
</div>
</div>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="k">constexpr</span> <span class="n">const_iterator</span> <span class="n">begin</span><span class="p">()</span> <span class="k">const</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
</div>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Returns: </dt>
<dd>
<p><code>data()</code>.</p>
</dd>
</dl>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<div class="title">Note</div>
</td>
<td class="content">
The non-const overload is only <code>constexpr</code> under C&#43;&#43;14 or later.
</td>
</tr>
</table>
</div>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="k">constexpr</span> <span class="n">iterator</span> <span class="n">end</span><span class="p">()</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
</div>
</div>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="k">constexpr</span> <span class="n">const_iterator</span> <span class="n">end</span><span class="p">()</span> <span class="k">const</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
</div>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Returns: </dt>
<dd>
<p><code>data() + size()</code>.</p>
</dd>
</dl>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<div class="title">Note</div>
</td>
<td class="content">
The non-const overload is only <code>constexpr</code> under C&#43;&#43;14 or later.
</td>
</tr>
</table>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Example: </dt>
<dd>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="k">using</span> <span class="k">namespace</span> <span class="n">boost</span><span class="o">::</span><span class="n">uuids</span><span class="p">;</span>
<span class="n">uuid</span> <span class="n">u</span><span class="p">;</span>
<span class="k">for</span><span class="p">(</span> <span class="n">uuid</span><span class="o">::</span><span class="n">const_iterator</span> <span class="n">it</span> <span class="o">=</span> <span class="n">u</span><span class="p">.</span><span class="n">begin</span><span class="p">();</span> <span class="n">it</span> <span class="o">!=</span> <span class="n">u</span><span class="p">.</span><span class="n">end</span><span class="p">();</span> <span class="o">++</span><span class="n">it</span> <span class="p">)</span>
<span class="p">{</span>
<span class="n">uuid</span><span class="o">::</span><span class="n">value_type</span> <span class="n">v</span> <span class="o">=</span> <span class="o">*</span><span class="n">it</span><span class="p">;</span>
<span class="c1">// do something with the octet v</span>
<span class="p">}</span>
<span class="k">for</span><span class="p">(</span> <span class="n">uuid</span><span class="o">::</span><span class="n">iterator</span> <span class="n">it</span> <span class="o">=</span> <span class="n">u</span><span class="p">.</span><span class="n">begin</span><span class="p">();</span> <span class="n">it</span> <span class="o">!=</span> <span class="n">u</span><span class="p">.</span><span class="n">end</span><span class="p">();</span> <span class="o">++</span><span class="n">it</span> <span class="p">)</span>
<span class="p">{</span>
<span class="o">*</span><span class="n">it</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
<span class="p">}</span></code></pre>
</div>
</div>
</dd>
</dl>
</div>
</div>
<div class="sect3">
<h4 id="uuid_data"><a class="link" href="#uuid_data">Data</a></h4>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="k">constexpr</span> <span class="n">std</span><span class="o">::</span><span class="kt">uint8_t</span><span class="o">*</span> <span class="n">data</span><span class="p">()</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
</div>
</div>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="k">constexpr</span> <span class="n">std</span><span class="o">::</span><span class="kt">uint8_t</span> <span class="k">const</span><span class="o">*</span> <span class="n">data</span><span class="p">()</span> <span class="k">const</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
</div>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Returns: </dt>
<dd>
<p><code>data_</code>.</p>
</dd>
</dl>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<div class="title">Note</div>
</td>
<td class="content">
The non-const overload is only <code>constexpr</code> under C&#43;&#43;14 or later.
</td>
</tr>
</table>
</div>
</div>
<div class="sect3">
<h4 id="uuid_size"><a class="link" href="#uuid_size">Size</a></h4>
<div class="paragraph">
<p>The size of a <code>uuid</code> (in octets) is fixed at 16.</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="k">constexpr</span> <span class="n">size_type</span> <span class="n">size</span><span class="p">()</span> <span class="k">const</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
</div>
</div>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="k">static</span> <span class="k">constexpr</span> <span class="n">size_type</span> <span class="n">static_size</span><span class="p">()</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
</div>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Returns: </dt>
<dd>
<p><code>16</code>.</p>
</dd>
<dt class="hdlist1">Example: </dt>
<dd>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="k">using</span> <span class="k">namespace</span> <span class="n">boost</span><span class="o">::</span><span class="n">uuids</span><span class="p">;</span>
<span class="n">uuid</span> <span class="n">u</span><span class="p">;</span>
<span class="n">assert</span><span class="p">(</span> <span class="n">u</span><span class="p">.</span><span class="n">size</span><span class="p">()</span> <span class="o">==</span> <span class="mi">16</span> <span class="p">);</span>
<span class="k">static_assert</span><span class="p">(</span> <span class="n">uuid</span><span class="o">::</span><span class="n">static_size</span><span class="p">()</span> <span class="o">==</span> <span class="mi">16</span> <span class="p">);</span></code></pre>
</div>
</div>
</dd>
</dl>
</div>
</div>
<div class="sect3">
<h4 id="uuid_is_nil"><a class="link" href="#uuid_is_nil">is_nil</a></h4>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="k">constexpr</span> <span class="kt">bool</span> <span class="n">is_nil</span><span class="p">()</span> <span class="k">const</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
</div>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Returns: </dt>
<dd>
<p><code>true</code> when the <code>uuid</code> is equal to the nil UUID, <code>{00000000-0000-0000-0000-000000000000}</code>, otherwise <code>false</code>.</p>
</dd>
</dl>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<div class="title">Note</div>
</td>
<td class="content">
This function is only <code>constexpr</code> under C&#43;&#43;14 or later, and under GCC 9 or later, Clang 9 or later, or MSVC 14.25 or later.
</td>
</tr>
</table>
</div>
</div>
<div class="sect3">
<h4 id="uuid_variant"><a class="link" href="#uuid_variant">Variant</a></h4>
<div class="paragraph">
<p>Three bits of a <code>uuid</code> determine the variant.</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="k">constexpr</span> <span class="n">variant_type</span> <span class="n">variant</span><span class="p">()</span> <span class="k">const</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
</div>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Returns: </dt>
<dd>
<p>The UUID variant; usually <code>variant_rfc_4122</code> for non-nil UUIDs.</p>
</dd>
</dl>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<div class="title">Note</div>
</td>
<td class="content">
This function is only <code>constexpr</code> under C&#43;&#43;14 or later.
</td>
</tr>
</table>
</div>
</div>
<div class="sect3">
<h4 id="uuid_version"><a class="link" href="#uuid_version">Version</a></h4>
<div class="paragraph">
<p>Four bits of a <code>uuid</code> determine the version, that is the mechanism used to generate the <code>uuid</code>.</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="k">constexpr</span> <span class="n">version_type</span> <span class="n">version</span><span class="p">()</span> <span class="k">const</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
</div>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Returns: </dt>
<dd>
<p>The UUID version.</p>
</dd>
</dl>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<div class="title">Note</div>
</td>
<td class="content">
This function is only <code>constexpr</code> under C&#43;&#43;14 or later.
</td>
</tr>
</table>
</div>
</div>
<div class="sect3">
<h4 id="uuid_time_based_fields"><a class="link" href="#uuid_time_based_fields">Time-based Fields</a></h4>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="k">constexpr</span> <span class="n">timestamp_type</span> <span class="n">timestamp_v1</span><span class="p">()</span> <span class="k">const</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
</div>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Returns: </dt>
<dd>
<p>The UUIDv1 timestamp (number of 100ns intervals since 00:00:00.00, 15 October 1582).
The value is only meaningful for version 1 UUIDs.</p>
</dd>
</dl>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<div class="title">Note</div>
</td>
<td class="content">
This function is only <code>constexpr</code> under C&#43;&#43;14 or later.
</td>
</tr>
</table>
</div>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="n">uuid_clock</span><span class="o">::</span><span class="n">time_point</span> <span class="n">time_point_v1</span><span class="p">()</span> <span class="k">const</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
</div>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Returns: </dt>
<dd>
<p>The timestamp of a version 1 UUID, expressed as a <code>&lt;chrono&gt;</code> <code>time_point</code>.</p>
</dd>
</dl>
</div>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="k">constexpr</span> <span class="n">timestamp_type</span> <span class="n">timestamp_v6</span><span class="p">()</span> <span class="k">const</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
</div>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Returns: </dt>
<dd>
<p>The UUIDv6 timestamp (number of 100ns intervals since 00:00:00.00, 15 October 1582).
The value is only meaningful for version 6 UUIDs.</p>
</dd>
</dl>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<div class="title">Note</div>
</td>
<td class="content">
This function is only <code>constexpr</code> under C&#43;&#43;14 or later.
</td>
</tr>
</table>
</div>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="n">uuid_clock</span><span class="o">::</span><span class="n">time_point</span> <span class="n">time_point_v6</span><span class="p">()</span> <span class="k">const</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
</div>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Returns: </dt>
<dd>
<p>The timestamp of a version 6 UUID, expressed as a <code>&lt;chrono&gt;</code> <code>time_point</code>.</p>
</dd>
</dl>
</div>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="k">constexpr</span> <span class="n">timestamp_type</span> <span class="n">timestamp_v7</span><span class="p">()</span> <span class="k">const</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
</div>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Returns: </dt>
<dd>
<p>The UUIDv7 timestamp (number of milliseconds since the Unix epoch - midnight 1 Jan 1970 UTC).
The value is only meaningful for version 7 UUIDs.</p>
</dd>
</dl>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<div class="title">Note</div>
</td>
<td class="content">
This function is only <code>constexpr</code> under C&#43;&#43;14 or later.
</td>
</tr>
</table>
</div>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="n">std</span><span class="o">::</span><span class="n">chrono</span><span class="o">::</span><span class="n">time_point</span><span class="o">&lt;</span><span class="n">std</span><span class="o">::</span><span class="n">chrono</span><span class="o">::</span><span class="n">system_clock</span><span class="p">,</span> <span class="n">std</span><span class="o">::</span><span class="n">chrono</span><span class="o">::</span><span class="n">milliseconds</span><span class="o">&gt;</span>
<span class="n">time_point_v7</span><span class="p">()</span> <span class="k">const</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
</div>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Returns: </dt>
<dd>
<p>The timestamp of a version 7 UUID, expressed as a <code>&lt;chrono&gt;</code> <code>time_point</code>.</p>
</dd>
</dl>
</div>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="k">constexpr</span> <span class="n">clock_seq_type</span> <span class="n">clock_seq</span><span class="p">()</span> <span class="k">const</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
</div>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Returns: </dt>
<dd>
<p>The clock sequence of a time-based UUID.
The value is only meaningful for time-based UUIDs (version 1 and version 6).</p>
</dd>
</dl>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<div class="title">Note</div>
</td>
<td class="content">
This function is only <code>constexpr</code> under C&#43;&#43;14 or later.
</td>
</tr>
</table>
</div>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="k">constexpr</span> <span class="n">node_type</span> <span class="n">node_identifier</span><span class="p">()</span> <span class="k">const</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
</div>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Returns: </dt>
<dd>
<p>The node identifier of a time-based UUID.
The value is only meaningful for time-based UUIDs (version 1 and version 6).</p>
</dd>
</dl>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<div class="title">Note</div>
</td>
<td class="content">
This function is only <code>constexpr</code> under C&#43;&#43;14 or later.
</td>
</tr>
</table>
</div>
</div>
<div class="sect3">
<h4 id="uuid_swap"><a class="link" href="#uuid_swap">Swap</a></h4>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="k">constexpr</span> <span class="kt">void</span> <span class="n">swap</span><span class="p">(</span> <span class="n">uuid</span><span class="o">&amp;</span> <span class="n">rhs</span> <span class="p">)</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
</div>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Effects: </dt>
<dd>
<p>Exchanges the values of <code>*this</code> and <code>rhs</code>.</p>
</dd>
</dl>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<div class="title">Note</div>
</td>
<td class="content">
This function is only <code>constexpr</code> under C&#43;&#43;14 or later.
</td>
</tr>
</table>
</div>
</div>
<div class="sect3">
<h4 id="uuid_operators"><a class="link" href="#uuid_operators">Operators</a></h4>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="k">constexpr</span> <span class="kt">bool</span> <span class="k">operator</span><span class="o">==</span><span class="p">(</span> <span class="n">uuid</span> <span class="k">const</span><span class="o">&amp;</span> <span class="n">lhs</span><span class="p">,</span> <span class="n">uuid</span> <span class="k">const</span><span class="o">&amp;</span> <span class="n">rhs</span> <span class="p">)</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
</div>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Returns: </dt>
<dd>
<p>As if <code>std::memcmp( lhs.data(), rhs.data(), 16 ) == 0</code>.</p>
</dd>
</dl>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<div class="title">Note</div>
</td>
<td class="content">
This function is only <code>constexpr</code> under C&#43;&#43;14 or later, and under GCC 9 or later, Clang 9 or later, or MSVC 14.25 or later.
</td>
</tr>
</table>
</div>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="k">constexpr</span> <span class="kt">bool</span> <span class="k">operator</span><span class="o">!=</span><span class="p">(</span> <span class="n">uuid</span> <span class="k">const</span><span class="o">&amp;</span> <span class="n">lhs</span><span class="p">,</span> <span class="n">uuid</span> <span class="k">const</span><span class="o">&amp;</span> <span class="n">rhs</span> <span class="p">)</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
</div>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Returns: </dt>
<dd>
<p><code>!(lhs == rhs)</code>.</p>
</dd>
</dl>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<div class="title">Note</div>
</td>
<td class="content">
This function is only <code>constexpr</code> under C&#43;&#43;14 or later, and under GCC 9 or later, Clang 9 or later, or MSVC 14.25 or later.
</td>
</tr>
</table>
</div>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="k">constexpr</span> <span class="kt">bool</span> <span class="k">operator</span><span class="o">&lt;</span><span class="p">(</span> <span class="n">uuid</span> <span class="k">const</span><span class="o">&amp;</span> <span class="n">lhs</span><span class="p">,</span> <span class="n">uuid</span> <span class="k">const</span><span class="o">&amp;</span> <span class="n">rhs</span> <span class="p">)</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
</div>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Returns: </dt>
<dd>
<p>As if <code>std::memcmp( lhs.data(), rhs.data(), 16 ) &lt; 0</code>.</p>
</dd>
</dl>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<div class="title">Note</div>
</td>
<td class="content">
This function is only <code>constexpr</code> under C&#43;&#43;14 or later, and under GCC 9 or later, Clang 9 or later, or MSVC 14.25 or later.
</td>
</tr>
</table>
</div>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="k">constexpr</span> <span class="kt">bool</span> <span class="k">operator</span><span class="o">&gt;</span><span class="p">(</span> <span class="n">uuid</span> <span class="k">const</span><span class="o">&amp;</span> <span class="n">lhs</span><span class="p">,</span> <span class="n">uuid</span> <span class="k">const</span><span class="o">&amp;</span> <span class="n">rhs</span> <span class="p">)</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
</div>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Returns: </dt>
<dd>
<p><code>rhs &lt; lhs</code>.</p>
</dd>
</dl>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<div class="title">Note</div>
</td>
<td class="content">
This function is only <code>constexpr</code> under C&#43;&#43;14 or later, and under GCC 9 or later, Clang 9 or later, or MSVC 14.25 or later.
</td>
</tr>
</table>
</div>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="k">constexpr</span> <span class="kt">bool</span> <span class="k">operator</span><span class="o">&lt;=</span><span class="p">(</span> <span class="n">uuid</span> <span class="k">const</span><span class="o">&amp;</span> <span class="n">lhs</span><span class="p">,</span> <span class="n">uuid</span> <span class="k">const</span><span class="o">&amp;</span> <span class="n">rhs</span> <span class="p">)</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
</div>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Returns: </dt>
<dd>
<p><code>!(rhs &lt; lhs)</code>.</p>
</dd>
</dl>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<div class="title">Note</div>
</td>
<td class="content">
This function is only <code>constexpr</code> under C&#43;&#43;14 or later, and under GCC 9 or later, Clang 9 or later, or MSVC 14.25 or later.
</td>
</tr>
</table>
</div>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="k">constexpr</span> <span class="kt">bool</span> <span class="k">operator</span><span class="o">&gt;=</span><span class="p">(</span> <span class="n">uuid</span> <span class="k">const</span><span class="o">&amp;</span> <span class="n">lhs</span><span class="p">,</span> <span class="n">uuid</span> <span class="k">const</span><span class="o">&amp;</span> <span class="n">rhs</span> <span class="p">)</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
</div>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Returns: </dt>
<dd>
<p><code>!(lhs &lt; rhs)</code>.</p>
</dd>
</dl>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<div class="title">Note</div>
</td>
<td class="content">
This function is only <code>constexpr</code> under C&#43;&#43;14 or later, and under GCC 9 or later, Clang 9 or later, or MSVC 14.25 or later.
</td>
</tr>
</table>
</div>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="k">constexpr</span> <span class="n">std</span><span class="o">::</span><span class="n">strong_ordering</span> <span class="k">operator</span><span class="o">&lt;=&gt;</span><span class="p">(</span> <span class="n">uuid</span> <span class="k">const</span><span class="o">&amp;</span> <span class="n">lhs</span><span class="p">,</span> <span class="n">uuid</span> <span class="k">const</span><span class="o">&amp;</span> <span class="n">rhs</span> <span class="p">)</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
</div>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Returns: </dt>
<dd>
<p>As if <code>std::memcmp( lhs.data(), rhs.data(), 16 ) &lt;=&gt; 0</code>.</p>
</dd>
</dl>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<div class="title">Note</div>
</td>
<td class="content">
This function is only <code>constexpr</code> under C&#43;&#43;14 or later, and under GCC 9 or later, Clang 9 or later, or MSVC 14.25 or later.
</td>
</tr>
</table>
</div>
</div>
<div class="sect3">
<h4 id="uuid_free_swap"><a class="link" href="#uuid_free_swap">Free Swap</a></h4>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="k">constexpr</span> <span class="kt">void</span> <span class="n">swap</span><span class="p">(</span> <span class="n">uuid</span><span class="o">&amp;</span> <span class="n">lhs</span><span class="p">,</span> <span class="n">uuid</span><span class="o">&amp;</span> <span class="n">rhs</span> <span class="p">)</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
</div>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Effects: </dt>
<dd>
<p><code>lhs.swap( rhs );</code></p>
</dd>
</dl>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<div class="title">Note</div>
</td>
<td class="content">
This function is only <code>constexpr</code> under C&#43;&#43;14 or later.
</td>
</tr>
</table>
</div>
</div>
<div class="sect3">
<h4 id="uuid_hash_value"><a class="link" href="#uuid_hash_value">hash_value</a></h4>
<div class="paragraph">
<p>This function allows instances of <code>uuid</code> to be used with <a href="https://www.boost.org/doc/libs/release/libs/container_hash/doc/html/hash.html#ref_boostcontainer_hashhash_hpp">boost::hash</a>.</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="k">constexpr</span> <span class="n">std</span><span class="o">::</span><span class="kt">size_t</span> <span class="n">hash_value</span><span class="p">(</span> <span class="n">uuid</span> <span class="k">const</span><span class="o">&amp;</span> <span class="n">u</span> <span class="p">)</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
</div>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Returns: </dt>
<dd>
<p>The hash value of the <code>uuid</code>.</p>
</dd>
</dl>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<div class="title">Note</div>
</td>
<td class="content">
This function is only <code>constexpr</code> under C&#43;&#43;14 or later.
</td>
</tr>
</table>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Example: </dt>
<dd>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="n">boost</span><span class="o">::</span><span class="n">unordered_flat_map</span><span class="o">&lt;</span><span class="n">boost</span><span class="o">::</span><span class="n">uuids</span><span class="o">::</span><span class="n">uuid</span><span class="p">,</span> <span class="kt">int</span><span class="o">&gt;</span> <span class="n">hash_map</span><span class="p">;</span></code></pre>
</div>
</div>
</dd>
</dl>
</div>
</div>
<div class="sect3">
<h4 id="uuid_serialization"><a class="link" href="#uuid_serialization">Serialization</a></h4>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="n">BOOST_CLASS_IMPLEMENTATION</span><span class="p">(</span><span class="n">boost</span><span class="o">::</span><span class="n">uuids</span><span class="o">::</span><span class="n">uuid</span><span class="p">,</span> <span class="n">boost</span><span class="o">::</span><span class="n">serialization</span><span class="o">::</span><span class="n">primitive_type</span><span class="p">)</span></code></pre>
</div>
</div>
<div class="paragraph">
<p><code>uuid</code> is serialized as a primitive type, that is, by its string representation.</p>
</div>
</div>
<div class="sect3">
<h4 id="uuid_stdhash"><a class="link" href="#uuid_stdhash">std::hash</a></h4>
<div class="paragraph">
<p>This specialization allows instances of <code>uuid</code> to be used with <code>std::hash</code>.</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="k">template</span><span class="o">&lt;</span><span class="p">&gt;</span> <span class="k">struct</span> <span class="nc">std</span><span class="o">::</span><span class="n">hash</span><span class="o">&lt;</span><span class="n">boost</span><span class="o">::</span><span class="n">uuids</span><span class="o">::</span><span class="n">uuid</span><span class="o">&gt;</span>
<span class="p">{</span>
<span class="k">constexpr</span> <span class="n">std</span><span class="o">::</span><span class="kt">size_t</span> <span class="k">operator</span><span class="p">()(</span> <span class="n">boost</span><span class="o">::</span><span class="n">uuids</span><span class="o">::</span><span class="n">uuid</span> <span class="k">const</span><span class="o">&amp;</span> <span class="n">v</span> <span class="p">)</span> <span class="k">const</span> <span class="k">noexcept</span><span class="p">;</span>
<span class="p">}</span></code></pre>
</div>
</div>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="k">constexpr</span> <span class="n">std</span><span class="o">::</span><span class="kt">size_t</span> <span class="k">operator</span><span class="p">()(</span> <span class="n">boost</span><span class="o">::</span><span class="n">uuids</span><span class="o">::</span><span class="n">uuid</span> <span class="k">const</span><span class="o">&amp;</span> <span class="n">v</span> <span class="p">)</span> <span class="k">const</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
</div>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Returns: </dt>
<dd>
<p><code>boost::uuids::hash_value( v )</code>.</p>
</dd>
</dl>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<div class="title">Note</div>
</td>
<td class="content">
This function is only <code>constexpr</code> under C&#43;&#43;14 or later.
</td>
</tr>
</table>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Example: </dt>
<dd>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="n">std</span><span class="o">::</span><span class="n">unordered_map</span><span class="o">&lt;</span><span class="n">boost</span><span class="o">::</span><span class="n">uuids</span><span class="o">::</span><span class="n">uuid</span><span class="p">,</span> <span class="kt">int</span><span class="o">&gt;</span> <span class="n">hash_map</span><span class="p">;</span></code></pre>
</div>
</div>
</dd>
</dl>
</div>
</div>
</div>
<div class="sect2">
<h3 id="uuid_io"><a class="link" href="#uuid_io">&lt;boost/uuid/uuid_io.hpp&gt;</a></h3>
<div class="sect3">
<h4 id="uuid_io_synopsis"><a class="link" href="#uuid_io_synopsis">Synopsis</a></h4>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="k">namespace</span> <span class="n">boost</span> <span class="p">{</span>
<span class="k">namespace</span> <span class="n">uuids</span> <span class="p">{</span>
<span class="c1">// stream insertion</span>
<span class="k">template</span><span class="o">&lt;</span><span class="k">class</span> <span class="nc">Ch</span><span class="p">,</span> <span class="k">class</span> <span class="nc">Traits</span><span class="p">&gt;</span>
<span class="n">std</span><span class="o">::</span><span class="n">basic_ostream</span><span class="o">&lt;</span><span class="n">Ch</span><span class="p">,</span> <span class="n">Traits</span><span class="o">&gt;&amp;</span>
<span class="k">operator</span><span class="o">&lt;&lt;</span><span class="p">(</span> <span class="n">std</span><span class="o">::</span><span class="n">basic_ostream</span><span class="o">&lt;</span><span class="n">Ch</span><span class="p">,</span> <span class="n">Traits</span><span class="o">&gt;&amp;</span> <span class="n">os</span><span class="p">,</span> <span class="n">uuid</span> <span class="k">const</span><span class="o">&amp;</span> <span class="n">u</span> <span class="p">);</span>
<span class="c1">// stream extraction</span>
<span class="k">template</span><span class="o">&lt;</span><span class="k">class</span> <span class="nc">Ch</span><span class="p">,</span> <span class="k">class</span> <span class="nc">Traits</span><span class="p">&gt;</span>
<span class="n">std</span><span class="o">::</span><span class="n">basic_istream</span><span class="o">&lt;</span><span class="n">Ch</span><span class="p">,</span> <span class="n">Traits</span><span class="o">&gt;&amp;</span>
<span class="k">operator</span><span class="o">&gt;&gt;</span><span class="p">(</span> <span class="n">std</span><span class="o">::</span><span class="n">basic_istream</span><span class="o">&lt;</span><span class="n">Ch</span><span class="p">,</span> <span class="n">Traits</span><span class="o">&gt;&amp;</span> <span class="n">is</span><span class="p">,</span> <span class="n">uuid</span><span class="o">&amp;</span> <span class="n">u</span> <span class="p">);</span>
<span class="c1">// to_chars</span>
<span class="k">template</span><span class="o">&lt;</span><span class="k">class</span> <span class="nc">OutputIterator</span><span class="p">&gt;</span>
<span class="k">constexpr</span> <span class="n">OutputIterator</span> <span class="n">to_chars</span><span class="p">(</span> <span class="n">uuid</span> <span class="k">const</span><span class="o">&amp;</span> <span class="n">u</span><span class="p">,</span> <span class="n">OutputIterator</span> <span class="n">out</span> <span class="p">);</span>
<span class="k">template</span><span class="o">&lt;</span><span class="k">class</span> <span class="nc">Ch</span><span class="p">&gt;</span>
<span class="k">constexpr</span> <span class="kt">bool</span> <span class="n">to_chars</span><span class="p">(</span> <span class="n">uuid</span> <span class="k">const</span><span class="o">&amp;</span> <span class="n">u</span><span class="p">,</span> <span class="n">Ch</span><span class="o">*</span> <span class="n">first</span><span class="p">,</span> <span class="n">Ch</span><span class="o">*</span> <span class="n">last</span> <span class="p">)</span> <span class="k">noexcept</span><span class="p">;</span>
<span class="k">template</span><span class="o">&lt;</span><span class="k">class</span> <span class="nc">Ch</span><span class="p">,</span> <span class="n">std</span><span class="o">::</span><span class="kt">size_t</span> <span class="n">N</span><span class="p">&gt;</span>
<span class="k">constexpr</span> <span class="n">Ch</span><span class="o">*</span> <span class="n">to_chars</span><span class="p">(</span> <span class="n">uuid</span> <span class="k">const</span><span class="o">&amp;</span> <span class="n">u</span><span class="p">,</span> <span class="n">Ch</span> <span class="p">(</span><span class="o">&amp;</span><span class="n">buffer</span><span class="p">)[</span> <span class="n">N</span> <span class="p">]</span> <span class="p">)</span> <span class="k">noexcept</span><span class="p">;</span>
<span class="c1">// to_string</span>
<span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">to_string</span><span class="p">(</span> <span class="n">uuid</span> <span class="k">const</span><span class="o">&amp;</span> <span class="n">u</span> <span class="p">);</span>
<span class="n">std</span><span class="o">::</span><span class="n">wstring</span> <span class="n">to_wstring</span><span class="p">(</span> <span class="n">uuid</span> <span class="k">const</span><span class="o">&amp;</span> <span class="n">u</span> <span class="p">);</span>
<span class="c1">// from_chars</span>
<span class="k">enum</span> <span class="k">class</span> <span class="nc">from_chars_error</span>
<span class="p">{</span>
<span class="n">none</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span>
<span class="n">unexpected_end_of_input</span><span class="p">,</span>
<span class="n">hex_digit_expected</span><span class="p">,</span>
<span class="n">dash_expected</span><span class="p">,</span>
<span class="n">closing_brace_expected</span><span class="p">,</span>
<span class="n">unexpected_extra_input</span>
<span class="p">};</span>
<span class="k">template</span><span class="o">&lt;</span><span class="k">class</span> <span class="nc">Ch</span><span class="p">&gt;</span> <span class="k">struct</span> <span class="nc">from_chars_result</span>
<span class="p">{</span>
<span class="n">Ch</span> <span class="k">const</span><span class="o">*</span> <span class="n">ptr</span><span class="p">;</span>
<span class="n">from_chars_error</span> <span class="n">ec</span><span class="p">;</span>
<span class="k">constexpr</span> <span class="k">explicit</span> <span class="k">operator</span> <span class="kt">bool</span><span class="p">()</span> <span class="k">const</span> <span class="k">noexcept</span><span class="p">;</span>
<span class="p">};</span>
<span class="k">template</span><span class="o">&lt;</span><span class="k">class</span> <span class="nc">Ch</span><span class="p">&gt;</span>
<span class="k">constexpr</span> <span class="n">from_chars_result</span><span class="o">&lt;</span><span class="n">Ch</span><span class="o">&gt;</span>
<span class="n">from_chars</span><span class="p">(</span> <span class="n">Ch</span> <span class="k">const</span><span class="o">*</span> <span class="n">first</span><span class="p">,</span> <span class="n">Ch</span> <span class="k">const</span><span class="o">*</span> <span class="n">last</span><span class="p">,</span> <span class="n">uuid</span><span class="o">&amp;</span> <span class="n">u</span> <span class="p">)</span> <span class="k">noexcept</span><span class="p">;</span>
<span class="c1">// uuid_from_string</span>
<span class="k">template</span><span class="o">&lt;</span><span class="k">class</span> <span class="nc">Ch</span><span class="p">&gt;</span> <span class="k">constexpr</span> <span class="n">uuid</span> <span class="nf">uuid_from_string</span><span class="p">(</span> <span class="n">Ch</span> <span class="k">const</span><span class="o">*</span> <span class="n">str</span> <span class="p">);</span>
<span class="k">template</span><span class="o">&lt;</span><span class="k">class</span> <span class="nc">Str</span><span class="p">&gt;</span> <span class="k">constexpr</span> <span class="n">uuid</span> <span class="nf">uuid_from_string</span><span class="p">(</span> <span class="n">Str</span> <span class="k">const</span><span class="o">&amp;</span> <span class="n">str</span> <span class="p">);</span>
<span class="p">}}</span> <span class="c1">// namespace boost::uuids</span></code></pre>
</div>
</div>
</div>
<div class="sect3">
<h4 id="uuid_io_stream_insertion"><a class="link" href="#uuid_io_stream_insertion">Stream Insertion</a></h4>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="k">template</span><span class="o">&lt;</span><span class="k">class</span> <span class="nc">Ch</span><span class="p">,</span> <span class="k">class</span> <span class="nc">Traits</span><span class="p">&gt;</span>
<span class="n">std</span><span class="o">::</span><span class="n">basic_ostream</span><span class="o">&lt;</span><span class="n">Ch</span><span class="p">,</span> <span class="n">Traits</span><span class="o">&gt;&amp;</span>
<span class="k">operator</span><span class="o">&lt;&lt;</span><span class="p">(</span> <span class="n">std</span><span class="o">::</span><span class="n">basic_ostream</span><span class="o">&lt;</span><span class="n">Ch</span><span class="p">,</span> <span class="n">Traits</span><span class="o">&gt;&amp;</span> <span class="n">os</span><span class="p">,</span> <span class="n">uuid</span> <span class="k">const</span><span class="o">&amp;</span> <span class="n">u</span> <span class="p">);</span></code></pre>
</div>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Requires: </dt>
<dd>
<p><code>Ch</code> must be a character type (one of <code>char</code>, <code>wchar_t</code>, <code>char8_t</code>, <code>char16_t</code>, <code>char32_t</code>).</p>
</dd>
<dt class="hdlist1">Effects: </dt>
<dd>
<p>Inserts the string representation of <code>u</code> into the output stream <code>os</code>.</p>
<div class="paragraph">
<p>The string representation of a <code>uuid</code> is <code>hhhhhhhh-hhhh-hhhh-hhhh-hhhhhhhhhhhh</code>, where <code>h</code> is a lowercase hexadecimal digit.</p>
</div>
</dd>
</dl>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<div class="title">Note</div>
</td>
<td class="content">
This operator also enables the use of
<a href="https://www.boost.org/doc/libs/release/doc/html/boost_lexical_cast/synopsis.html">boost::lexical_cast</a>
to convert a <code>uuid</code> to a string.
</td>
</tr>
</table>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Example: </dt>
<dd>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="k">using</span> <span class="k">namespace</span> <span class="n">boost</span><span class="o">::</span><span class="n">uuids</span><span class="p">;</span>
<span class="n">uuid</span> <span class="n">u1</span> <span class="o">=</span> <span class="n">random_generator</span><span class="p">()();</span>
<span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="n">u1</span> <span class="o">&lt;&lt;</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
<span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">s1</span> <span class="o">=</span> <span class="n">boost</span><span class="o">::</span><span class="n">lexical_cast</span><span class="o">&lt;</span><span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">&gt;</span><span class="p">(</span> <span class="n">u1</span> <span class="p">);</span>
<span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="n">s1</span> <span class="o">&lt;&lt;</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span></code></pre>
</div>
</div>
</dd>
</dl>
</div>
</div>
<div class="sect3">
<h4 id="uuid_io_stream_extraction"><a class="link" href="#uuid_io_stream_extraction">Stream Extraction</a></h4>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="k">template</span><span class="o">&lt;</span><span class="k">class</span> <span class="nc">Ch</span><span class="p">,</span> <span class="k">class</span> <span class="nc">Traits</span><span class="p">&gt;</span>
<span class="n">std</span><span class="o">::</span><span class="n">basic_istream</span><span class="o">&lt;</span><span class="n">Ch</span><span class="p">,</span> <span class="n">Traits</span><span class="o">&gt;&amp;</span>
<span class="k">operator</span><span class="o">&gt;&gt;</span><span class="p">(</span> <span class="n">std</span><span class="o">::</span><span class="n">basic_istream</span><span class="o">&lt;</span><span class="n">Ch</span><span class="p">,</span> <span class="n">Traits</span><span class="o">&gt;&amp;</span> <span class="n">is</span><span class="p">,</span> <span class="n">uuid</span><span class="o">&amp;</span> <span class="n">u</span> <span class="p">);</span></code></pre>
</div>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Requires: </dt>
<dd>
<p><code>Ch</code> must be a character type (one of <code>char</code>, <code>wchar_t</code>, <code>char8_t</code>, <code>char16_t</code>, <code>char32_t</code>).</p>
</dd>
<dt class="hdlist1">Effects: </dt>
<dd>
<p>Parses a <code>uuid</code> string representation from <code>is</code> and stores the result into <code>u</code>.</p>
</dd>
</dl>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<div class="title">Note</div>
</td>
<td class="content">
This operator also enables the use of
<a href="https://www.boost.org/doc/libs/release/doc/html/boost_lexical_cast/synopsis.html">boost::lexical_cast</a>
to convert a string to a <code>uuid</code>.
</td>
</tr>
</table>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Example: </dt>
<dd>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="k">using</span> <span class="k">namespace</span> <span class="n">boost</span><span class="o">::</span><span class="n">uuids</span><span class="p">;</span>
<span class="n">uuid</span> <span class="n">u1</span> <span class="o">=</span> <span class="n">random_generator</span><span class="p">()();</span>
<span class="n">std</span><span class="o">::</span><span class="n">stringstream</span> <span class="n">ss</span><span class="p">;</span>
<span class="n">ss</span> <span class="o">&lt;&lt;</span> <span class="n">u1</span><span class="p">;</span>
<span class="n">uuid</span> <span class="n">u2</span> <span class="o">=</span> <span class="n">boost</span><span class="o">::</span><span class="n">lexical_cast</span><span class="o">&lt;</span><span class="n">uuid</span><span class="o">&gt;</span><span class="p">(</span> <span class="n">ss</span><span class="p">.</span><span class="n">str</span><span class="p">()</span> <span class="p">);</span>
<span class="n">assert</span><span class="p">(</span> <span class="n">u1</span> <span class="o">==</span> <span class="n">u2</span> <span class="p">);</span>
<span class="n">uuid</span> <span class="n">u3</span><span class="p">;</span>
<span class="n">ss</span> <span class="o">&gt;&gt;</span> <span class="n">u3</span><span class="p">;</span>
<span class="n">assert</span><span class="p">(</span> <span class="n">u1</span> <span class="o">==</span> <span class="n">u3</span> <span class="p">);</span></code></pre>
</div>
</div>
</dd>
</dl>
</div>
</div>
<div class="sect3">
<h4 id="uuid_io_to_chars"><a class="link" href="#uuid_io_to_chars">to_chars</a></h4>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="k">template</span><span class="o">&lt;</span><span class="k">class</span> <span class="nc">OutputIterator</span><span class="p">&gt;</span>
<span class="k">constexpr</span> <span class="n">OutputIterator</span> <span class="nf">to_chars</span><span class="p">(</span> <span class="n">uuid</span> <span class="k">const</span><span class="o">&amp;</span> <span class="n">u</span><span class="p">,</span> <span class="n">OutputIterator</span> <span class="n">out</span> <span class="p">);</span></code></pre>
</div>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Effects: </dt>
<dd>
<p>Outputs the string representation of <code>u</code> (exactly 36 characters of type <code>char</code>) to the output iterator <code>out</code>.</p>
</dd>
</dl>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<div class="title">Note</div>
</td>
<td class="content">
This function is only <code>constexpr</code> under C&#43;&#43;14 or later, and under GCC 9 or later, Clang 9 or later, or MSVC 14.25 or later.
</td>
</tr>
</table>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Example: </dt>
<dd>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="k">using</span> <span class="k">namespace</span> <span class="n">boost</span><span class="o">::</span><span class="n">uuids</span><span class="p">;</span>
<span class="n">uuid</span> <span class="n">u</span> <span class="o">=</span> <span class="n">random_generator</span><span class="p">()();</span>
<span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o">&lt;</span><span class="kt">char</span><span class="o">&gt;</span> <span class="n">v</span><span class="p">;</span>
<span class="n">to_chars</span><span class="p">(</span> <span class="n">u</span><span class="p">,</span> <span class="n">std</span><span class="o">::</span><span class="n">back_inserter</span><span class="p">(</span> <span class="n">v</span> <span class="p">)</span> <span class="p">);</span></code></pre>
</div>
</div>
</dd>
</dl>
</div>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="k">template</span><span class="o">&lt;</span><span class="k">class</span> <span class="nc">Ch</span><span class="p">&gt;</span>
<span class="k">constexpr</span> <span class="kt">bool</span> <span class="n">to_chars</span><span class="p">(</span> <span class="n">uuid</span> <span class="k">const</span><span class="o">&amp;</span> <span class="n">u</span><span class="p">,</span> <span class="n">Ch</span><span class="o">*</span> <span class="n">first</span><span class="p">,</span> <span class="n">Ch</span><span class="o">*</span> <span class="n">last</span> <span class="p">)</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
</div>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Requires: </dt>
<dd>
<p><code>Ch</code> must be a character type (one of <code>char</code>, <code>wchar_t</code>, <code>char8_t</code>, <code>char16_t</code>, <code>char32_t</code>).</p>
</dd>
<dt class="hdlist1">Effects: </dt>
<dd>
<p>If <code>last - first &gt;= 36</code>, writes the string representation of <code>u</code> (exactly 36 characters, not null terminated) into the buffer starting at <code>first</code> and returns <code>true</code>. Otherwise, returns <code>false</code>.</p>
</dd>
</dl>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<div class="title">Note</div>
</td>
<td class="content">
This function is only <code>constexpr</code> under C&#43;&#43;14 or later, and under GCC 9 or later, Clang 9 or later, or MSVC 14.25 or later.
</td>
</tr>
</table>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Example: </dt>
<dd>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="k">using</span> <span class="k">namespace</span> <span class="n">boost</span><span class="o">::</span><span class="n">uuids</span><span class="p">;</span>
<span class="n">uuid</span> <span class="n">u</span> <span class="o">=</span> <span class="n">random_generator</span><span class="p">()();</span>
<span class="kt">char</span> <span class="n">buf</span><span class="p">[</span> <span class="mi">36</span> <span class="p">];</span>
<span class="kt">bool</span> <span class="n">ret</span> <span class="o">=</span> <span class="n">to_chars</span><span class="p">(</span> <span class="n">u</span><span class="p">,</span> <span class="n">std</span><span class="o">::</span><span class="n">begin</span><span class="p">(</span> <span class="n">buf</span> <span class="p">),</span> <span class="n">std</span><span class="o">::</span><span class="n">end</span><span class="p">(</span> <span class="n">buf</span> <span class="p">)</span> <span class="p">);</span>
<span class="n">assert</span><span class="p">(</span> <span class="n">ret</span> <span class="p">);</span>
<span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="p">(</span> <span class="n">buf</span><span class="p">,</span> <span class="mi">36</span> <span class="p">)</span> <span class="o">&lt;&lt;</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span></code></pre>
</div>
</div>
</dd>
</dl>
</div>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="k">template</span><span class="o">&lt;</span><span class="k">class</span> <span class="nc">Ch</span><span class="p">,</span> <span class="n">std</span><span class="o">::</span><span class="kt">size_t</span> <span class="n">N</span><span class="p">&gt;</span>
<span class="k">constexpr</span> <span class="n">Ch</span><span class="o">*</span> <span class="n">to_chars</span><span class="p">(</span> <span class="n">uuid</span> <span class="k">const</span><span class="o">&amp;</span> <span class="n">u</span><span class="p">,</span> <span class="n">Ch</span> <span class="p">(</span><span class="o">&amp;</span><span class="n">buffer</span><span class="p">)[</span> <span class="n">N</span> <span class="p">]</span> <span class="p">)</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
</div>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Requires: </dt>
<dd>
<p><code>Ch</code> must be a character type (one of <code>char</code>, <code>wchar_t</code>, <code>char8_t</code>, <code>char16_t</code>, <code>char32_t</code>); <code>N</code> must be at least 37.</p>
</dd>
<dt class="hdlist1">Effects: </dt>
<dd>
<p>Writes the string representation of <code>u</code> (exactly 37 characters, including the null terminator) into <code>buffer</code>.</p>
</dd>
<dt class="hdlist1">Returns: </dt>
<dd>
<p><code>buffer + 36</code>.</p>
</dd>
</dl>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<div class="title">Note</div>
</td>
<td class="content">
This function is only <code>constexpr</code> under C&#43;&#43;14 or later, and under GCC 9 or later, Clang 9 or later, or MSVC 14.25 or later.
</td>
</tr>
</table>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Example: </dt>
<dd>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="k">using</span> <span class="k">namespace</span> <span class="n">boost</span><span class="o">::</span><span class="n">uuids</span><span class="p">;</span>
<span class="n">uuid</span> <span class="n">u</span> <span class="o">=</span> <span class="n">random_generator</span><span class="p">()();</span>
<span class="kt">char</span> <span class="n">buf</span><span class="p">[</span> <span class="mi">37</span> <span class="p">];</span>
<span class="n">to_chars</span><span class="p">(</span> <span class="n">u</span><span class="p">,</span> <span class="n">buf</span> <span class="p">);</span>
<span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="n">buf</span> <span class="o">&lt;&lt;</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span></code></pre>
</div>
</div>
</dd>
</dl>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<div class="title">Note</div>
</td>
<td class="content">
As a special exception, <code>N</code> is allowed to be 36.
In this case, the function writes exactly 36 characters into <code>buffer</code> and does not write a null terminator.
This use is only supported for backward compatibility and is deprecated.
Use a buffer of 37 characters instead, to allow for the null terminator.
</td>
</tr>
</table>
</div>
</div>
<div class="sect3">
<h4 id="uuid_io_to_string"><a class="link" href="#uuid_io_to_string">to_string</a></h4>
<div class="paragraph">
<p>The functions <code>to_string</code> and <code>to_wstring</code> are provided as a convenience to convert a <code>uuid</code> to a string.
They are likely to be more efficient than <a href="https://www.boost.org/doc/libs/release/doc/html/boost_lexical_cast/synopsis.html">boost::lexical_cast</a>.</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="nf">to_string</span><span class="p">(</span> <span class="n">uuid</span> <span class="k">const</span><span class="o">&amp;</span> <span class="n">u</span> <span class="p">);</span></code></pre>
</div>
</div>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="n">std</span><span class="o">::</span><span class="n">wstring</span> <span class="nf">to_wstring</span><span class="p">(</span> <span class="n">uuid</span> <span class="k">const</span><span class="o">&amp;</span> <span class="n">u</span> <span class="p">);</span></code></pre>
</div>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Returns: </dt>
<dd>
<p>A string containing the string representation of <code>u</code>.</p>
</dd>
<dt class="hdlist1">Example: </dt>
<dd>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="k">using</span> <span class="k">namespace</span> <span class="n">boost</span><span class="o">::</span><span class="n">uuids</span><span class="p">;</span>
<span class="n">uuid</span> <span class="n">u</span> <span class="o">=</span> <span class="n">random_generator</span><span class="p">()();</span>
<span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">s1</span> <span class="o">=</span> <span class="n">to_string</span><span class="p">(</span> <span class="n">u</span> <span class="p">);</span>
<span class="n">std</span><span class="o">::</span><span class="n">wstring</span> <span class="n">s2</span> <span class="o">=</span> <span class="n">to_wstring</span><span class="p">(</span> <span class="n">u</span> <span class="p">);</span></code></pre>
</div>
</div>
</dd>
</dl>
</div>
</div>
<div class="sect3">
<h4 id="uuid_io_from_chars_result"><a class="link" href="#uuid_io_from_chars_result">from_chars_result</a></h4>
<div class="paragraph">
<p>The <code>from_chars_result</code> structure contains the result of a <code>from_chars</code> call, where the <code>ptr</code> member points to the first character that was
not consumed during parsing and <code>ec</code> is <code>from_chars_error::none</code>, if parsing succeeded, otherwise the error code returned by the parser.</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="k">constexpr</span> <span class="k">explicit</span> <span class="k">operator</span> <span class="kt">bool</span><span class="p">()</span> <span class="k">const</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
</div>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Returns: </dt>
<dd>
<p><code>this-&gt;ec == from_chars_error::none</code>.</p>
</dd>
</dl>
</div>
</div>
<div class="sect3">
<h4 id="uuid_io_from_chars"><a class="link" href="#uuid_io_from_chars">from_chars</a></h4>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="k">template</span><span class="o">&lt;</span><span class="k">class</span> <span class="nc">Ch</span><span class="p">&gt;</span>
<span class="k">constexpr</span> <span class="n">from_chars_result</span><span class="o">&lt;</span><span class="n">Ch</span><span class="o">&gt;</span>
<span class="n">from_chars</span><span class="p">(</span> <span class="n">Ch</span> <span class="k">const</span><span class="o">*</span> <span class="n">first</span><span class="p">,</span> <span class="n">Ch</span> <span class="k">const</span><span class="o">*</span> <span class="n">last</span><span class="p">,</span> <span class="n">uuid</span><span class="o">&amp;</span> <span class="n">u</span> <span class="p">)</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
</div>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Requires: </dt>
<dd>
<p><code>Ch</code> must be a character type (one of <code>char</code>, <code>wchar_t</code>, <code>char8_t</code>, <code>char16_t</code>, <code>char32_t</code>).</p>
</dd>
<dt class="hdlist1">Effects: </dt>
<dd>
<p>Parses a <code>uuid</code> string representation from the characters in the range <code>[first, last)</code> and stores the result in <code>u</code>.
On error, the returned <code>from_chars_result</code> struct contains the error code in <code>ec</code> and <code>ptr</code> points to the character at which parsing failed.
On success, <code>ec</code> contains <code>from_chars_error::none</code> and <code>ptr</code> points to the character immediately after the last <code>uuid</code> character.</p>
</dd>
</dl>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<div class="title">Note</div>
</td>
<td class="content">
The values <code>from_chars_error::closing_brace_expected</code> and <code>from_chars_error::unexpected_extra_input</code> are never returned by <code>from_chars</code>.
They can be returned from the nonthrowing <code>string_generator::operator()</code> overload.
</td>
</tr>
</table>
</div>
</div>
<div class="sect3">
<h4 id="uuid_io_uuid_from_string"><a class="link" href="#uuid_io_uuid_from_string">uuid_from_string</a></h4>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="k">template</span><span class="o">&lt;</span><span class="k">class</span> <span class="nc">Ch</span><span class="p">&gt;</span> <span class="k">constexpr</span> <span class="n">uuid</span> <span class="nf">uuid_from_string</span><span class="p">(</span> <span class="n">Ch</span> <span class="k">const</span><span class="o">*</span> <span class="n">str</span> <span class="p">);</span></code></pre>
</div>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Requires: </dt>
<dd>
<p><code>Ch</code> must be a character type (one of <code>char</code>, <code>wchar_t</code>, <code>char8_t</code>, <code>char16_t</code>, <code>char32_t</code>).</p>
</dd>
<dt class="hdlist1">Effects: </dt>
<dd>
<p>Parses a <code>uuid</code> string representation from the characters in the range <code>[str, str + std::char_traits&lt;Ch&gt;::length(str))</code> and stores the result in <code>u</code>.
On error, throws <code>invalid_uuid</code>.</p>
</dd>
</dl>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<div class="title">Note</div>
</td>
<td class="content">
Unlike <code>from_chars</code>, this function does not allow extra input; if after a complete UUID is parsed, unconsumed characters remain, an exception is thrown.
</td>
</tr>
</table>
</div>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="k">template</span><span class="o">&lt;</span><span class="k">class</span> <span class="nc">Str</span><span class="p">&gt;</span> <span class="k">constexpr</span> <span class="n">uuid</span> <span class="nf">uuid_from_string</span><span class="p">(</span> <span class="n">Str</span> <span class="k">const</span><span class="o">&amp;</span> <span class="n">str</span> <span class="p">);</span></code></pre>
</div>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Requires: </dt>
<dd>
<p><code>Str</code> must be a <em>string-like</em> type; that is, one with a nested <code>value_type</code> type (<code>Ch</code>) and with a nested <code>traits_type</code> type.
<code>str.data()</code> must return <code>Ch const*</code>. <code>str.data() + str.size()</code> must be of type <code>Ch const*</code>.
<code>Ch</code> must be a character type (one of <code>char</code>, <code>wchar_t</code>, <code>char8_t</code>, <code>char16_t</code>, <code>char32_t</code>).</p>
</dd>
<dt class="hdlist1">Effects: </dt>
<dd>
<p>Parses a <code>uuid</code> string representation from the characters in the range <code>[str.data(), str.data() + str.size())</code> and stores the result in <code>u</code>.
On error, throws <code>invalid_uuid</code>.</p>
</dd>
</dl>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<div class="title">Note</div>
</td>
<td class="content">
Unlike <code>from_chars</code>, this function does not allow extra input; if after a complete UUID is parsed, unconsumed characters remain, an exception is thrown.
</td>
</tr>
</table>
</div>
</div>
</div>
<div class="sect2">
<h3 id="invalid_uuid"><a class="link" href="#invalid_uuid">&lt;boost/uuid/invalid_uuid.hpp&gt;</a></h3>
<div class="sect3">
<h4 id="invalid_uuid_synopsis"><a class="link" href="#invalid_uuid_synopsis">Synopsis</a></h4>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="k">namespace</span> <span class="n">boost</span> <span class="p">{</span>
<span class="k">namespace</span> <span class="n">uuids</span> <span class="p">{</span>
<span class="k">class</span> <span class="nc">invalid_uuid</span><span class="o">:</span> <span class="k">public</span> <span class="n">std</span><span class="o">::</span><span class="n">runtime_error</span>
<span class="p">{</span>
<span class="nl">public:</span>
<span class="n">invalid_uuid</span><span class="p">(</span> <span class="n">std</span><span class="o">::</span><span class="kt">ptrdiff_t</span> <span class="n">pos</span><span class="p">,</span> <span class="n">from_chars_error</span> <span class="n">err</span> <span class="p">);</span>
<span class="n">std</span><span class="o">::</span><span class="kt">ptrdiff_t</span> <span class="n">position</span><span class="p">()</span> <span class="k">const</span> <span class="k">noexcept</span><span class="p">;</span>
<span class="n">from_chars_error</span> <span class="n">error</span><span class="p">()</span> <span class="k">const</span> <span class="k">noexcept</span><span class="p">;</span>
<span class="p">};</span>
<span class="p">}}</span> <span class="c1">// namespace boost::uuids</span></code></pre>
</div>
</div>
</div>
<div class="sect3">
<h4 id="invalid_uuid_invalid_uuid"><a class="link" href="#invalid_uuid_invalid_uuid">invalid_uuid</a></h4>
<div class="paragraph">
<p>Functions that parse a string UUID representation throw an exception of type <code>invalid_uuid</code> to indicate failure.</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="n">invalid_uuid</span><span class="p">(</span> <span class="n">std</span><span class="o">::</span><span class="kt">ptrdiff_t</span> <span class="n">pos</span><span class="p">,</span> <span class="n">from_chars_error</span> <span class="n">err</span> <span class="p">);</span></code></pre>
</div>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Effects: </dt>
<dd>
<p>Constructs an <code>invalid_uuid</code> object, initializing its internal members to <code>pos</code> and <code>err</code> and the <code>runtime_error</code> base class with an appropriate error message.</p>
</dd>
<dt class="hdlist1">Postconditions: </dt>
<dd>
<p><code>this-&gt;position() == pos &amp;&amp; this-&gt;error() == err</code>.</p>
</dd>
</dl>
</div>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="n">std</span><span class="o">::</span><span class="kt">ptrdiff_t</span> <span class="n">position</span><span class="p">()</span> <span class="k">const</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
</div>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Returns: </dt>
<dd>
<p>The zero-based position in the input string at which parsing failed.</p>
</dd>
</dl>
</div>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="n">from_chars_error</span> <span class="n">error</span><span class="p">()</span> <span class="k">const</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
</div>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Returns: </dt>
<dd>
<p>The error code describing the reason parsing failed.</p>
</dd>
</dl>
</div>
</div>
</div>
<div class="sect2">
<h3 id="generators"><a class="link" href="#generators">&lt;boost/uuid/generators.hpp&gt;</a></h3>
<div class="sect3">
<h4 id="generators_synopsis"><a class="link" href="#generators_synopsis">Synopsis</a></h4>
<div class="paragraph">
<p>This convenience header includes all the UUID generators.</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="cp">#include</span> <span class="cpf">&lt;boost/uuid/nil_generator.hpp&gt;</span><span class="cp">
#include</span> <span class="cpf">&lt;boost/uuid/string_generator.hpp&gt;</span><span class="cp">
#include</span> <span class="cpf">&lt;boost/uuid/name_generator.hpp&gt;</span><span class="cp">
#include</span> <span class="cpf">&lt;boost/uuid/random_generator.hpp&gt;</span></code></pre>
</div>
</div>
</div>
</div>
<div class="sect2">
<h3 id="nil_generator"><a class="link" href="#nil_generator">&lt;boost/uuid/nil_generator.hpp&gt;</a></h3>
<div class="sect3">
<h4 id="nil_generator_synopsis"><a class="link" href="#nil_generator_synopsis">Synopsis</a></h4>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="k">namespace</span> <span class="n">boost</span> <span class="p">{</span>
<span class="k">namespace</span> <span class="n">uuids</span> <span class="p">{</span>
<span class="k">struct</span> <span class="nc">nil_generator</span>
<span class="p">{</span>
<span class="k">using</span> <span class="n">result_type</span> <span class="o">=</span> <span class="n">uuid</span><span class="p">;</span>
<span class="n">uuid</span> <span class="k">operator</span><span class="p">()()</span> <span class="k">const</span> <span class="k">noexcept</span><span class="p">;</span>
<span class="p">};</span>
<span class="n">uuid</span> <span class="n">nil_uuid</span><span class="p">()</span> <span class="k">noexcept</span><span class="p">;</span>
<span class="p">}}</span> <span class="c1">// namespace boost::uuids</span></code></pre>
</div>
</div>
</div>
<div class="sect3">
<h4 id="nil_generator_nil_generator"><a class="link" href="#nil_generator_nil_generator">nil_generator</a></h4>
<div class="paragraph">
<p>The <code>nil_generator</code> class always generates a nil <code>uuid</code>.</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="n">uuid</span> <span class="k">operator</span><span class="p">()()</span> <span class="k">const</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
</div>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Returns: </dt>
<dd>
<p>A nil UUID.</p>
</dd>
<dt class="hdlist1">Example: </dt>
<dd>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="k">using</span> <span class="k">namespace</span> <span class="n">boost</span><span class="o">::</span><span class="n">uuid</span><span class="p">;</span>
<span class="n">nil_generator</span> <span class="n">gen</span><span class="p">;</span>
<span class="n">uuid</span> <span class="n">u</span> <span class="o">=</span> <span class="n">gen</span><span class="p">();</span>
<span class="n">assert</span><span class="p">(</span> <span class="n">u</span><span class="p">.</span><span class="n">is_nil</span><span class="p">()</span> <span class="p">);</span></code></pre>
</div>
</div>
</dd>
</dl>
</div>
</div>
<div class="sect3">
<h4 id="nil_generator_nil_uuid"><a class="link" href="#nil_generator_nil_uuid">nil_uuid</a></h4>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="n">uuid</span> <span class="n">nil_uuid</span><span class="p">()</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
</div>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Returns: </dt>
<dd>
<p>A nil UUID.</p>
</dd>
<dt class="hdlist1">Example: </dt>
<dd>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="k">using</span> <span class="k">namespace</span> <span class="n">boost</span><span class="o">::</span><span class="n">uuid</span><span class="p">;</span>
<span class="n">uuid</span> <span class="n">u</span> <span class="o">=</span> <span class="n">nil_uuid</span><span class="p">();</span>
<span class="n">assert</span><span class="p">(</span> <span class="n">u</span><span class="p">.</span><span class="n">is_nil</span><span class="p">()</span> <span class="p">);</span></code></pre>
</div>
</div>
</dd>
</dl>
</div>
</div>
</div>
<div class="sect2">
<h3 id="string_generator"><a class="link" href="#string_generator">&lt;boost/uuid/string_generator.hpp&gt;</a></h3>
<div class="sect3">
<h4 id="string_generator_synopsis"><a class="link" href="#string_generator_synopsis">Synopsis</a></h4>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="k">namespace</span> <span class="n">boost</span> <span class="p">{</span>
<span class="k">namespace</span> <span class="n">uuids</span> <span class="p">{</span>
<span class="k">struct</span> <span class="nc">string_generator</span>
<span class="p">{</span>
<span class="k">using</span> <span class="n">result_type</span> <span class="o">=</span> <span class="n">uuid</span><span class="p">;</span>
<span class="k">template</span><span class="o">&lt;</span><span class="k">class</span> <span class="nc">Str</span><span class="p">&gt;</span>
<span class="k">constexpr</span> <span class="n">uuid</span> <span class="k">operator</span><span class="p">()(</span> <span class="n">Str</span> <span class="k">const</span><span class="o">&amp;</span> <span class="n">s</span> <span class="p">)</span> <span class="k">const</span><span class="p">;</span>
<span class="k">template</span><span class="o">&lt;</span><span class="k">class</span> <span class="nc">Ch</span><span class="p">&gt;</span>
<span class="k">constexpr</span> <span class="n">uuid</span> <span class="k">operator</span><span class="p">()(</span> <span class="n">Ch</span> <span class="k">const</span><span class="o">*</span> <span class="n">s</span> <span class="p">)</span> <span class="k">const</span><span class="p">;</span>
<span class="k">template</span><span class="o">&lt;</span><span class="k">class</span> <span class="nc">CharIterator</span><span class="p">&gt;</span>
<span class="k">constexpr</span> <span class="n">uuid</span> <span class="k">operator</span><span class="p">()(</span> <span class="n">CharIterator</span> <span class="n">first</span><span class="p">,</span> <span class="n">CharIterator</span> <span class="n">last</span> <span class="p">)</span> <span class="k">const</span><span class="p">;</span>
<span class="k">template</span><span class="o">&lt;</span><span class="k">class</span> <span class="nc">CharIterator</span><span class="p">&gt;</span>
<span class="k">constexpr</span> <span class="n">uuid</span> <span class="k">operator</span><span class="p">()(</span> <span class="n">CharIterator</span> <span class="n">first</span><span class="p">,</span> <span class="n">CharIterator</span> <span class="n">last</span><span class="p">,</span>
<span class="n">std</span><span class="o">::</span><span class="kt">ptrdiff_t</span><span class="o">&amp;</span> <span class="n">pos</span><span class="p">,</span> <span class="n">from_chars_error</span><span class="o">&amp;</span> <span class="n">err</span> <span class="p">)</span> <span class="k">const</span> <span class="k">noexcept</span><span class="p">;</span>
<span class="p">};</span>
<span class="p">}}</span> <span class="c1">// namespace boost::uuids</span></code></pre>
</div>
</div>
</div>
<div class="sect3">
<h4 id="string_generator_string_generator"><a class="link" href="#string_generator_string_generator">string_generator</a></h4>
<div class="paragraph">
<p>The <code>string_generator</code> class generates a <code>uuid</code> from a string.</p>
</div>
<div class="paragraph">
<p>The standards-defined string format in <a href="https://www.ietf.org/rfc/rfc4122.txt">RFC 4122</a> (p. 3) is supported, as well as a few variants.</p>
</div>
<div class="paragraph">
<p>Valid strings match the following PCRE regular expression:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="txt">^({)?([0-9a-fA-F]{8})(?-)?([0-9a-fA-F]{4})(?(DASH)-)([0-9a-fA-F]{4})(?(DASH)-)([0-9a-fA-F]{4})(?(DASH)-)([0-9a-fA-F]{12})(?(1)})$</code></pre>
</div>
</div>
<div class="paragraph">
<p>Or more generally, the following formats are accepted as valid string formats, where h is hexadecimal, without case sensitivity, and without any leading or trailing whitespace:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="txt">hhhhhhhh-hhhh-hhhh-hhhh-hhhhhhhhhhhh
{hhhhhhhh-hhhh-hhhh-hhhh-hhhhhhhhhhhh}
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
{hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh}</code></pre>
</div>
</div>
<div class="paragraph">
<p>Invalid input will throw an <code>invalid_uuid</code> exception.</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="k">template</span><span class="o">&lt;</span><span class="k">class</span> <span class="nc">Str</span><span class="p">&gt;</span>
<span class="k">constexpr</span> <span class="n">uuid</span> <span class="k">operator</span><span class="p">()(</span> <span class="n">Str</span> <span class="k">const</span><span class="o">&amp;</span> <span class="n">s</span> <span class="p">)</span> <span class="k">const</span><span class="p">;</span></code></pre>
</div>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Requires: </dt>
<dd>
<p><code>Str</code> must be a <em>string-like</em> type; that is, one with a nested <code>value_type</code> type (<code>Ch</code>) and with a nested <code>traits_type</code> type.
<code>str.data()</code> must return <code>Ch const*</code>. <code>str.data() + str.size()</code> must be of type <code>Ch const*</code>.
<code>Ch</code> must be a character type (one of <code>char</code>, <code>wchar_t</code>, <code>char8_t</code>, <code>char16_t</code>, <code>char32_t</code>).</p>
</dd>
<dt class="hdlist1">Effects: </dt>
<dd>
<p>Parses the string <code>s</code> into a <code>uuid</code> and returns the result.</p>
</dd>
<dt class="hdlist1">Example: </dt>
<dd>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="k">using</span> <span class="k">namespace</span> <span class="n">boost</span><span class="o">::</span><span class="n">uuids</span><span class="p">;</span>
<span class="n">string_generator</span> <span class="n">gen</span><span class="p">;</span>
<span class="n">uuid</span> <span class="n">u1</span> <span class="o">=</span> <span class="n">gen</span><span class="p">(</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="p">(</span> <span class="s">"0123456789abcdef0123456789abcdef"</span> <span class="p">)</span> <span class="p">);</span>
<span class="n">uuid</span> <span class="n">u2</span> <span class="o">=</span> <span class="n">gen</span><span class="p">(</span> <span class="n">std</span><span class="o">::</span><span class="n">wstring</span><span class="p">(</span> <span class="s">L"01234567-89AB-CDEF-0123-456789ABCDEF"</span> <span class="p">)</span> <span class="p">);</span></code></pre>
</div>
</div>
</dd>
</dl>
</div>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="k">template</span><span class="o">&lt;</span><span class="k">class</span> <span class="nc">Ch</span><span class="p">&gt;</span>
<span class="k">constexpr</span> <span class="n">uuid</span> <span class="k">operator</span><span class="p">()(</span> <span class="n">Ch</span> <span class="k">const</span><span class="o">*</span> <span class="n">s</span> <span class="p">)</span> <span class="k">const</span><span class="p">;</span></code></pre>
</div>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Requires: </dt>
<dd>
<p><code>Ch</code> must be a character type (one of <code>char</code>, <code>wchar_t</code>, <code>char8_t</code>, <code>char16_t</code>, <code>char32_t</code>).</p>
</dd>
<dt class="hdlist1">Effects: </dt>
<dd>
<p>Parses the string <code>s</code> into a <code>uuid</code> and returns the result.</p>
</dd>
<dt class="hdlist1">Example: </dt>
<dd>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="k">using</span> <span class="k">namespace</span> <span class="n">boost</span><span class="o">::</span><span class="n">uuids</span><span class="p">;</span>
<span class="n">string_generator</span> <span class="n">gen</span><span class="p">;</span>
<span class="n">uuid</span> <span class="n">u1</span> <span class="o">=</span> <span class="n">gen</span><span class="p">(</span> <span class="s">"{01234567-89ab-cdef-0123-456789abcdef}"</span> <span class="p">);</span>
<span class="n">uuid</span> <span class="n">u2</span> <span class="o">=</span> <span class="n">gen</span><span class="p">(</span> <span class="s">L"01234567-89ab-cdef-0123-456789abcdef"</span> <span class="p">);</span></code></pre>
</div>
</div>
</dd>
</dl>
</div>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="k">template</span><span class="o">&lt;</span><span class="k">class</span> <span class="nc">CharIterator</span><span class="p">&gt;</span>
<span class="k">constexpr</span> <span class="n">uuid</span> <span class="k">operator</span><span class="p">()(</span> <span class="n">CharIterator</span> <span class="n">first</span><span class="p">,</span> <span class="n">CharIterator</span> <span class="n">last</span> <span class="p">)</span> <span class="k">const</span><span class="p">;</span></code></pre>
</div>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Requires: </dt>
<dd>
<p><code>CharIterator</code> must be an input iterator with a character value type (one of <code>char</code>, <code>wchar_t</code>, <code>char8_t</code>, <code>char16_t</code>, <code>char32_t</code>).</p>
</dd>
<dt class="hdlist1">Effects: </dt>
<dd>
<p>Parses the character sequence <code>[first, last)</code> into a <code>uuid</code> and returns the result.</p>
</dd>
<dt class="hdlist1">Example: </dt>
<dd>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="k">using</span> <span class="k">namespace</span> <span class="n">boost</span><span class="o">::</span><span class="n">uuids</span><span class="p">;</span>
<span class="n">string_generator</span> <span class="n">gen</span><span class="p">;</span>
<span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="nf">s1</span><span class="p">(</span> <span class="s">"0123456789abcdef0123456789abcdef"</span> <span class="p">);</span>
<span class="n">uuid</span> <span class="n">u1</span> <span class="o">=</span> <span class="n">gen</span><span class="p">(</span> <span class="n">s1</span><span class="p">.</span><span class="n">begin</span><span class="p">(),</span> <span class="n">s1</span><span class="p">.</span><span class="n">end</span><span class="p">()</span> <span class="p">);</span>
<span class="n">std</span><span class="o">::</span><span class="n">wstring</span> <span class="nf">s2</span><span class="p">(</span> <span class="s">L"01234567-89AB-CDEF-0123-456789ABCDEF"</span> <span class="p">);</span>
<span class="n">uuid</span> <span class="n">u2</span> <span class="o">=</span> <span class="n">gen</span><span class="p">(</span> <span class="n">s2</span><span class="p">.</span><span class="n">begin</span><span class="p">(),</span> <span class="n">s2</span><span class="p">.</span><span class="n">end</span><span class="p">()</span> <span class="p">);</span></code></pre>
</div>
</div>
</dd>
</dl>
</div>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="k">template</span><span class="o">&lt;</span><span class="k">class</span> <span class="nc">CharIterator</span><span class="p">&gt;</span>
<span class="k">constexpr</span> <span class="n">uuid</span> <span class="k">operator</span><span class="p">()(</span> <span class="n">CharIterator</span> <span class="n">first</span><span class="p">,</span> <span class="n">CharIterator</span> <span class="n">last</span><span class="p">,</span>
<span class="n">std</span><span class="o">::</span><span class="kt">ptrdiff_t</span><span class="o">&amp;</span> <span class="n">pos</span><span class="p">,</span> <span class="n">from_chars_error</span><span class="o">&amp;</span> <span class="n">err</span> <span class="p">)</span> <span class="k">const</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
</div>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Requires: </dt>
<dd>
<p><code>CharIterator</code> must be an input iterator with a character value type (one of <code>char</code>, <code>wchar_t</code>, <code>char8_t</code>, <code>char16_t</code>, <code>char32_t</code>).</p>
</dd>
<dt class="hdlist1">Effects: </dt>
<dd>
<p>Parses the character sequence <code>[first, last)</code> into a <code>uuid</code> and returns the result.
On error, <code>pos</code> contains the position at which parsing failed, and <code>err</code> contains the error.
On success, <code>err</code> contains <code>from_chars_error::none</code>.</p>
</dd>
</dl>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<div class="title">Note</div>
</td>
<td class="content">
Unlike <code>from_chars</code>, this function does not allow extra input; if after a complete UUID is parsed, unconsumed characters remain, <code>err</code> is set to <code>from_chars_error::unexpected_extra_input</code>.
</td>
</tr>
</table>
</div>
</div>
</div>
<div class="sect2">
<h3 id="namespaces"><a class="link" href="#namespaces">&lt;boost/uuid/namespaces.hpp&gt;</a></h3>
<div class="sect3">
<h4 id="namespaces_synopsis"><a class="link" href="#namespaces_synopsis">Synopsis</a></h4>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="k">namespace</span> <span class="n">boost</span> <span class="p">{</span>
<span class="k">namespace</span> <span class="n">uuids</span> <span class="p">{</span>
<span class="k">namespace</span> <span class="n">ns</span> <span class="p">{</span>
<span class="n">uuid</span> <span class="n">dns</span><span class="p">()</span> <span class="k">noexcept</span><span class="p">;</span>
<span class="n">uuid</span> <span class="n">url</span><span class="p">()</span> <span class="k">noexcept</span><span class="p">;</span>
<span class="n">uuid</span> <span class="n">oid</span><span class="p">()</span> <span class="k">noexcept</span><span class="p">;</span>
<span class="n">uuid</span> <span class="n">x500dn</span><span class="p">()</span> <span class="k">noexcept</span><span class="p">;</span>
<span class="p">}}}</span> <span class="c1">// namespace boost::uuids::ns</span></code></pre>
</div>
</div>
</div>
<div class="sect3">
<h4 id="namespaces_namespaces"><a class="link" href="#namespaces_namespaces">Namespaces</a></h4>
<div class="paragraph">
<p>This header provides definitions of the four namespaces defined in <a href="https://tools.ietf.org/html/rfc4122#appendix-C">RFC 4122, Appendix C</a>.</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="n">uuid</span> <span class="n">dns</span><span class="p">()</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
</div>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Returns: </dt>
<dd>
<p>The DNS namespace UUID from RFC 4122, <code>{6ba7b810-9dad-11d1-80b4-00c04fd430c8}</code>.</p>
</dd>
</dl>
</div>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="n">uuid</span> <span class="n">url</span><span class="p">()</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
</div>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Returns: </dt>
<dd>
<p>The URL namespace UUID from RFC 4122, <code>{6ba7b811-9dad-11d1-80b4-00c04fd430c8}</code>.</p>
</dd>
</dl>
</div>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="n">uuid</span> <span class="n">oid</span><span class="p">()</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
</div>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Returns: </dt>
<dd>
<p>The OID namespace UUID from RFC 4122, <code>{6ba7b812-9dad-11d1-80b4-00c04fd430c8}</code>.</p>
</dd>
</dl>
</div>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="n">uuid</span> <span class="n">x500dn</span><span class="p">()</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
</div>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Returns: </dt>
<dd>
<p>The X.500 DN namespace UUID from RFC 4122, <code>{6ba7b814-9dad-11d1-80b4-00c04fd430c8}</code>.</p>
</dd>
</dl>
</div>
</div>
</div>
<div class="sect2">
<h3 id="name_generator_sha1"><a class="link" href="#name_generator_sha1">&lt;boost/uuid/&#8203;name_generator_sha1.hpp&gt;</a></h3>
<div class="sect3">
<h4 id="name_generator_sha1_synopsis"><a class="link" href="#name_generator_sha1_synopsis">Synopsis</a></h4>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="cp">#include</span> <span class="cpf">&lt;boost/uuid/namespaces.hpp&gt;</span><span class="cp">
</span>
<span class="k">namespace</span> <span class="n">boost</span> <span class="p">{</span>
<span class="k">namespace</span> <span class="n">uuids</span> <span class="p">{</span>
<span class="k">class</span> <span class="nc">name_generator_sha1</span>
<span class="p">{</span>
<span class="nl">public:</span>
<span class="k">using</span> <span class="n">result_type</span> <span class="o">=</span> <span class="n">uuid</span><span class="p">;</span>
<span class="k">explicit</span> <span class="n">name_generator_sha1</span><span class="p">(</span> <span class="n">uuid</span> <span class="k">const</span><span class="o">&amp;</span> <span class="n">namespace_uuid</span> <span class="p">)</span> <span class="k">noexcept</span><span class="p">;</span>
<span class="k">template</span><span class="o">&lt;</span><span class="k">class</span> <span class="nc">Ch</span><span class="p">&gt;</span> <span class="n">uuid</span> <span class="k">operator</span><span class="p">()(</span> <span class="n">Ch</span> <span class="k">const</span><span class="o">*</span> <span class="n">name</span> <span class="p">)</span> <span class="k">const</span> <span class="k">noexcept</span><span class="p">;</span>
<span class="k">template</span><span class="o">&lt;</span><span class="k">class</span> <span class="nc">Ch</span><span class="p">,</span> <span class="k">class</span> <span class="nc">Traits</span><span class="p">,</span> <span class="k">class</span> <span class="nc">Alloc</span><span class="p">&gt;</span>
<span class="n">uuid</span> <span class="k">operator</span><span class="p">()(</span> <span class="n">std</span><span class="o">::</span><span class="n">basic_string</span><span class="o">&lt;</span><span class="n">Ch</span><span class="p">,</span> <span class="n">Traits</span><span class="p">,</span> <span class="n">Alloc</span><span class="o">&gt;</span> <span class="k">const</span><span class="o">&amp;</span> <span class="n">name</span> <span class="p">)</span> <span class="k">const</span> <span class="k">noexcept</span><span class="p">;</span>
<span class="n">uuid</span> <span class="k">operator</span><span class="p">()(</span> <span class="kt">void</span> <span class="k">const</span><span class="o">*</span> <span class="n">buffer</span><span class="p">,</span> <span class="n">std</span><span class="o">::</span><span class="kt">size_t</span> <span class="n">byte_count</span> <span class="p">)</span> <span class="k">const</span> <span class="k">noexcept</span><span class="p">;</span>
<span class="p">};</span>
<span class="p">}}</span> <span class="c1">// namespace boost::uuids</span></code></pre>
</div>
</div>
</div>
<div class="sect3">
<h4 id="name_generator_sha1_name_generator_sha1"><a class="link" href="#name_generator_sha1_name_generator_sha1">name_generator_sha1</a></h4>
<div class="paragraph">
<p>The class <code>name_generator_sha1</code> generates name-based version 5 UUIDs, using SHA1 as the hashing algorithm.</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="k">explicit</span> <span class="nf">name_generator_sha1</span><span class="p">(</span> <span class="n">uuid</span> <span class="k">const</span><span class="o">&amp;</span> <span class="n">namespace_uuid</span> <span class="p">);</span></code></pre>
</div>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Effects: </dt>
<dd>
<p>Constructs a <code>name_generator_sha1</code> that uses <code>namespace_uuid</code> as the namespace.</p>
</dd>
</dl>
</div>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="k">template</span><span class="o">&lt;</span><span class="k">class</span> <span class="nc">Ch</span><span class="p">&gt;</span> <span class="n">uuid</span> <span class="k">operator</span><span class="p">()(</span> <span class="n">Ch</span> <span class="k">const</span><span class="o">*</span> <span class="n">name</span> <span class="p">)</span> <span class="k">const</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
</div>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Requires: </dt>
<dd>
<p><code>Ch</code> must be one of <code>char</code>, <code>wchar_t</code>, <code>char8_t</code>, <code>char16_t</code>, or <code>char32_t</code>.</p>
</dd>
<dt class="hdlist1">Returns: </dt>
<dd>
<p>A name-based UUID version 5 produced from a digest of the namespace passed to the constructor and the characters of the string <code>name</code>, converted to octets.</p>
</dd>
<dt class="hdlist1">Remarks: </dt>
<dd>
<p>The characters of <code>name</code> are converted to a sequence of octets in the following manner:</p>
<div class="ulist">
<ul>
<li>
<p>If <code>Ch</code> is <code>char</code> or <code>char8_t</code>, the characters are processed as octets directly.</p>
</li>
<li>
<p>If <code>Ch</code> is <code>wchar_t</code>, the characters are converted to <code>uint32_t</code> and then serialized to four octets each using little-endian representation.</p>
</li>
<li>
<p>Otherwise, the character sequence is converted to UTF-8 and the result is processed as octets.</p>
</li>
</ul>
</div>
</dd>
<dt class="hdlist1">Example: </dt>
<dd>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="k">using</span> <span class="k">namespace</span> <span class="n">boost</span><span class="o">::</span><span class="n">uuids</span><span class="p">;</span>
<span class="n">name_generator_sha1</span> <span class="nf">gen</span><span class="p">(</span> <span class="n">ns</span><span class="o">::</span><span class="n">dns</span><span class="p">()</span> <span class="p">);</span>
<span class="n">uuid</span> <span class="n">u1</span> <span class="o">=</span> <span class="n">gen</span><span class="p">(</span> <span class="s">"boost.org"</span> <span class="p">);</span>
<span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="s">"</span><span class="se">\"</span><span class="s">boost.org</span><span class="se">\"</span><span class="s"> UUID in DNS namespace, SHA1 version: "</span> <span class="o">&lt;&lt;</span> <span class="n">u1</span> <span class="o">&lt;&lt;</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
<span class="c1">// Output:</span>
<span class="c1">// "boost.org" UUID in DNS namespace, SHA1 version: 0043f363-bbb4-5369-840a-322df6ec1926</span>
<span class="n">uuid</span> <span class="n">u2</span> <span class="o">=</span> <span class="n">gen</span><span class="p">(</span> <span class="s">L"boost.org"</span> <span class="p">);</span>
<span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="s">"L</span><span class="se">\"</span><span class="s">boost.org</span><span class="se">\"</span><span class="s"> UUID in DNS namespace, SHA1 version: "</span> <span class="o">&lt;&lt;</span> <span class="n">u2</span> <span class="o">&lt;&lt;</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
<span class="c1">// Output:</span>
<span class="c1">// L"boost.org" UUID in DNS namespace, SHA1 version: c31c5016-3493-5dc2-8484-5813d495cc18</span>
<span class="n">uuid</span> <span class="n">u3</span> <span class="o">=</span> <span class="n">gen</span><span class="p">(</span> <span class="s">u"boost.org"</span> <span class="p">);</span>
<span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="s">"u</span><span class="se">\"</span><span class="s">boost.org</span><span class="se">\"</span><span class="s"> UUID in DNS namespace, SHA1 version: "</span> <span class="o">&lt;&lt;</span> <span class="n">u3</span> <span class="o">&lt;&lt;</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
<span class="c1">// Output:</span>
<span class="c1">// u"boost.org" UUID in DNS namespace, SHA1 version: 0043f363-bbb4-5369-840a-322df6ec1926</span></code></pre>
</div>
</div>
</dd>
</dl>
</div>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="k">template</span><span class="o">&lt;</span><span class="k">class</span> <span class="nc">Ch</span><span class="p">,</span> <span class="k">class</span> <span class="nc">Traits</span><span class="p">,</span> <span class="k">class</span> <span class="nc">Alloc</span><span class="p">&gt;</span>
<span class="n">uuid</span> <span class="k">operator</span><span class="p">()(</span> <span class="n">std</span><span class="o">::</span><span class="n">basic_string</span><span class="o">&lt;</span><span class="n">Ch</span><span class="p">,</span> <span class="n">Traits</span><span class="p">,</span> <span class="n">Alloc</span><span class="o">&gt;</span> <span class="k">const</span><span class="o">&amp;</span> <span class="n">name</span> <span class="p">)</span> <span class="k">const</span><span class="p">;</span></code></pre>
</div>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Requires: </dt>
<dd>
<p><code>Ch</code> must be one of <code>char</code>, <code>wchar_t</code>, <code>char8_t</code>, <code>char16_t</code>, or <code>char32_t</code>.</p>
</dd>
<dt class="hdlist1">Returns: </dt>
<dd>
<p>As if <code>operator()( name.c_str() )</code>.</p>
</dd>
</dl>
</div>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="n">uuid</span> <span class="k">operator</span><span class="p">()(</span> <span class="kt">void</span> <span class="k">const</span><span class="o">*</span> <span class="n">buffer</span><span class="p">,</span> <span class="n">std</span><span class="o">::</span><span class="kt">size_t</span> <span class="n">byte_count</span> <span class="p">)</span> <span class="k">const</span><span class="p">;</span></code></pre>
</div>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Returns: </dt>
<dd>
<p>A name-based UUID version 5 produced from a digest of the namespace passed to the constructor and the <code>byte_count</code> octets starting from <code>buffer</code>.</p>
</dd>
</dl>
</div>
</div>
</div>
<div class="sect2">
<h3 id="name_generator_md5"><a class="link" href="#name_generator_md5">&lt;boost/uuid/&#8203;name_generator_md5.hpp&gt;</a></h3>
<div class="sect3">
<h4 id="name_generator_md5_synopsis"><a class="link" href="#name_generator_md5_synopsis">Synopsis</a></h4>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="cp">#include</span> <span class="cpf">&lt;boost/uuid/namespaces.hpp&gt;</span><span class="cp">
</span>
<span class="k">namespace</span> <span class="n">boost</span> <span class="p">{</span>
<span class="k">namespace</span> <span class="n">uuids</span> <span class="p">{</span>
<span class="k">class</span> <span class="nc">name_generator_md5</span>
<span class="p">{</span>
<span class="nl">public:</span>
<span class="k">using</span> <span class="n">result_type</span> <span class="o">=</span> <span class="n">uuid</span><span class="p">;</span>
<span class="k">explicit</span> <span class="n">name_generator_md5</span><span class="p">(</span> <span class="n">uuid</span> <span class="k">const</span><span class="o">&amp;</span> <span class="n">namespace_uuid</span> <span class="p">)</span> <span class="k">noexcept</span><span class="p">;</span>
<span class="k">template</span><span class="o">&lt;</span><span class="k">class</span> <span class="nc">Ch</span><span class="p">&gt;</span> <span class="n">uuid</span> <span class="k">operator</span><span class="p">()(</span> <span class="n">Ch</span> <span class="k">const</span><span class="o">*</span> <span class="n">name</span> <span class="p">)</span> <span class="k">const</span> <span class="k">noexcept</span><span class="p">;</span>
<span class="k">template</span><span class="o">&lt;</span><span class="k">class</span> <span class="nc">Ch</span><span class="p">,</span> <span class="k">class</span> <span class="nc">Traits</span><span class="p">,</span> <span class="k">class</span> <span class="nc">Alloc</span><span class="p">&gt;</span>
<span class="n">uuid</span> <span class="k">operator</span><span class="p">()(</span> <span class="n">std</span><span class="o">::</span><span class="n">basic_string</span><span class="o">&lt;</span><span class="n">Ch</span><span class="p">,</span> <span class="n">Traits</span><span class="p">,</span> <span class="n">Alloc</span><span class="o">&gt;</span> <span class="k">const</span><span class="o">&amp;</span> <span class="n">name</span> <span class="p">)</span> <span class="k">const</span> <span class="k">noexcept</span><span class="p">;</span>
<span class="n">uuid</span> <span class="k">operator</span><span class="p">()(</span> <span class="kt">void</span> <span class="k">const</span><span class="o">*</span> <span class="n">buffer</span><span class="p">,</span> <span class="n">std</span><span class="o">::</span><span class="kt">size_t</span> <span class="n">byte_count</span> <span class="p">)</span> <span class="k">const</span> <span class="k">noexcept</span><span class="p">;</span>
<span class="p">};</span>
<span class="p">}}</span> <span class="c1">// namespace boost::uuids</span></code></pre>
</div>
</div>
</div>
<div class="sect3">
<h4 id="name_generator_md5_name_generator_md5"><a class="link" href="#name_generator_md5_name_generator_md5">name_generator_md5</a></h4>
<div class="paragraph">
<p>The class <code>name_generator_md5</code> generates name-based version 3 UUIDs, using MD5 as the hashing algorithm.</p>
</div>
<div class="paragraph">
<p>Its interface and its operation are the same as those of <code>name_generator_sha1</code>, with the only difference being that it uses MD5 instead of SHA1.</p>
</div>
<div class="paragraph">
<p>There is no reason to use <code>name_generator_md5</code> except for compatibility. <code>name_generator_sha1</code> should be preferred in almost all cases.</p>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Example: </dt>
<dd>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="k">using</span> <span class="k">namespace</span> <span class="n">boost</span><span class="o">::</span><span class="n">uuids</span><span class="p">;</span>
<span class="n">name_generator_md5</span> <span class="nf">gen</span><span class="p">(</span> <span class="n">ns</span><span class="o">::</span><span class="n">dns</span><span class="p">()</span> <span class="p">);</span>
<span class="n">uuid</span> <span class="n">u1</span> <span class="o">=</span> <span class="n">gen</span><span class="p">(</span> <span class="s">"boost.org"</span> <span class="p">);</span>
<span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="s">"</span><span class="se">\"</span><span class="s">boost.org</span><span class="se">\"</span><span class="s"> UUID in DNS namespace, MD5 version: "</span> <span class="o">&lt;&lt;</span> <span class="n">u1</span> <span class="o">&lt;&lt;</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
<span class="c1">// Output:</span>
<span class="c1">// "boost.org" UUID in DNS namespace, MD5 version: 888eca9c-e655-31a2-a46b-a2a821f6b150</span>
<span class="n">uuid</span> <span class="n">u2</span> <span class="o">=</span> <span class="n">gen</span><span class="p">(</span> <span class="s">L"boost.org"</span> <span class="p">);</span>
<span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="s">"L</span><span class="se">\"</span><span class="s">boost.org</span><span class="se">\"</span><span class="s"> UUID in DNS namespace, MD5 version: "</span> <span class="o">&lt;&lt;</span> <span class="n">u2</span> <span class="o">&lt;&lt;</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
<span class="c1">// Output:</span>
<span class="c1">// L"boost.org" UUID in DNS namespace, MD5 version: 48149232-8cda-361b-b355-0bdb71d2cab3</span>
<span class="n">uuid</span> <span class="n">u3</span> <span class="o">=</span> <span class="n">gen</span><span class="p">(</span> <span class="s">u"boost.org"</span> <span class="p">);</span>
<span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="s">"u</span><span class="se">\"</span><span class="s">boost.org</span><span class="se">\"</span><span class="s"> UUID in DNS namespace, MD5 version: "</span> <span class="o">&lt;&lt;</span> <span class="n">u3</span> <span class="o">&lt;&lt;</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
<span class="c1">// Output:</span>
<span class="c1">// u"boost.org" UUID in DNS namespace, MD5 version: 888eca9c-e655-31a2-a46b-a2a821f6b150</span></code></pre>
</div>
</div>
</dd>
</dl>
</div>
</div>
</div>
<div class="sect2">
<h3 id="name_generator"><a class="link" href="#name_generator">&lt;boost/uuid/name_generator.hpp&gt;</a></h3>
<div class="sect3">
<h4 id="name_generator_synopsis"><a class="link" href="#name_generator_synopsis">Synopsis</a></h4>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="cp">#include</span> <span class="cpf">&lt;boost/uuid/name_generator_sha1.hpp&gt;</span><span class="cp">
#include</span> <span class="cpf">&lt;boost/uuid/name_generator_md5.hpp&gt;</span><span class="cp">
</span>
<span class="k">namespace</span> <span class="n">boost</span> <span class="p">{</span>
<span class="k">namespace</span> <span class="n">uuids</span> <span class="p">{</span>
<span class="c1">// only provided for backward compatibility</span>
<span class="k">using</span> <span class="n">name_generator</span> <span class="o">=</span> <span class="n">name_generator_sha1</span><span class="p">;</span>
<span class="k">using</span> <span class="n">name_generator_latest</span> <span class="o">=</span> <span class="n">name_generator_sha1</span><span class="p">;</span>
<span class="p">}}</span> <span class="c1">// namespace boost::uuids</span></code></pre>
</div>
</div>
<div class="paragraph">
<p>This header makes <code>name_generator_sha1</code> and <code>name_generator_md5</code> available and declares the compatibility aliases <code>name_generator</code> and <code>name_generator_latest</code>.</p>
</div>
</div>
</div>
<div class="sect2">
<h3 id="basic_random_generator"><a class="link" href="#basic_random_generator">&lt;boost/uuid/&#8203;basic_random_generator.hpp&gt;</a></h3>
<div class="sect3">
<h4 id="basic_random_generator_synopsis"><a class="link" href="#basic_random_generator_synopsis">Synopsis</a></h4>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="k">namespace</span> <span class="n">boost</span> <span class="p">{</span>
<span class="k">namespace</span> <span class="n">uuids</span> <span class="p">{</span>
<span class="k">template</span><span class="o">&lt;</span><span class="k">class</span> <span class="nc">UniformRandomNumberGenerator</span><span class="p">&gt;</span>
<span class="k">class</span> <span class="nc">basic_random_generator</span>
<span class="p">{</span>
<span class="nl">private:</span>
<span class="c1">// exposition only</span>
<span class="n">UniformRandomNumberGenerator</span><span class="o">*</span> <span class="n">p_</span><span class="p">;</span>
<span class="n">UniformRandomNumberGenerator</span> <span class="n">g_</span><span class="p">;</span>
<span class="nl">public:</span>
<span class="k">using</span> <span class="n">result_type</span> <span class="o">=</span> <span class="n">uuid</span><span class="p">;</span>
<span class="n">basic_random_generator</span><span class="p">();</span>
<span class="k">explicit</span> <span class="n">basic_random_generator</span><span class="p">(</span> <span class="n">UniformRandomNumberGenerator</span><span class="o">&amp;</span> <span class="n">gen</span> <span class="p">);</span>
<span class="k">explicit</span> <span class="n">basic_random_generator</span><span class="p">(</span> <span class="n">UniformRandomNumberGenerator</span><span class="o">*</span> <span class="n">pGen</span> <span class="p">);</span>
<span class="n">result_type</span> <span class="k">operator</span><span class="p">()();</span>
<span class="p">};</span>
<span class="p">}}</span> <span class="c1">// namespace boost::uuids</span></code></pre>
</div>
</div>
</div>
<div class="sect3">
<h4 id="basic_random_generator_basic_random_generator"><a class="link" href="#basic_random_generator_basic_random_generator">basic_random_generator</a></h4>
<div class="paragraph">
<p>The class template <code>basic_random_generator</code> generates a version 4 random number-based UUID from a random number generator
(one that conforms to the standard concept <a href="https://en.cppreference.com/w/cpp/named_req/UniformRandomBitGenerator">UniformRandomBitGenerator</a>
or to the Boost.Random concept <a href="https://www.boost.org/doc/libs/1_85_0/doc/html/boost_random/reference.html#boost_random.reference.concepts.uniform_random_number_generator">UniformRandomNumberGenerator</a>).</p>
</div>
<div class="paragraph">
<p>The default constructor will seed the random number generator with entropy obtained from <code>std::random_device</code>.</p>
</div>
<div class="paragraph">
<p>Additional constructors allow you to provide your own <code>UniformRandomNumberGenerator</code> and you are responsible for properly seeding it if necessary.</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="n">basic_random_generator</span><span class="p">();</span></code></pre>
</div>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Effects: </dt>
<dd>
<p>Value-initializes <code>g_</code> and initializes <code>p_</code> to <code>nullptr</code>.
If <code>g_.seed()</code> is a valid expression, calls <code>g_.seed( seed_seq );</code>
to seed <code>g_</code>, where <code>seed_seq</code> is an object providing a
<code>generate( first, last )</code> member function that fills the range
<code>[first, last)</code> using entropy obtained from <code>std::random_device</code>.</p>
</dd>
</dl>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<div class="title">Note</div>
</td>
<td class="content">
Random number generators conforming to the standard concept <a href="https://en.cppreference.com/w/cpp/named_req/RandomNumberEngine">RandomNumberEngine</a>
or the Boost.Random concept <a href="https://www.boost.org/doc/libs/1_85_0/doc/html/boost_random/reference.html#boost_random.reference.concepts.pseudo_random_number_generator">PseudoRandomNumberGenerator</a>
provide such <code>seed</code> member functions.
</td>
</tr>
</table>
</div>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="k">explicit</span> <span class="nf">basic_random_generator</span><span class="p">(</span> <span class="n">UniformRandomNumberGenerator</span><span class="o">&amp;</span> <span class="n">gen</span> <span class="p">);</span></code></pre>
</div>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Effects: </dt>
<dd>
<p>Value-initializes <code>g_</code> and initializes <code>p_</code> to <code>&amp;gen</code>.</p>
</dd>
</dl>
</div>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="k">explicit</span> <span class="nf">basic_random_generator</span><span class="p">(</span> <span class="n">UniformRandomNumberGenerator</span><span class="o">*</span> <span class="n">pGen</span> <span class="p">);</span></code></pre>
</div>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Effects: </dt>
<dd>
<p>Value-initializes <code>g_</code> and initializes <code>p_</code> to <code>pGen</code>.</p>
</dd>
</dl>
</div>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="n">result_type</span> <span class="nf">operator</span><span class="p">()();</span></code></pre>
</div>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Effects: </dt>
<dd>
<p>Generates and returns a version 4 UUID using random numbers
obtained from <code>*p_</code>, if <code>p_ != nullptr</code>, or from <code>g_</code>, otherwise.</p>
</dd>
<dt class="hdlist1">Example: </dt>
<dd>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="k">using</span> <span class="k">namespace</span> <span class="n">boost</span><span class="o">::</span><span class="n">uuids</span><span class="p">;</span>
<span class="n">basic_random_generator</span><span class="o">&lt;</span><span class="n">boost</span><span class="o">::</span><span class="n">mt19937</span><span class="o">&gt;</span> <span class="n">bulkgen</span><span class="p">;</span>
<span class="k">for</span><span class="p">(</span> <span class="kt">int</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="n">i</span> <span class="o">&lt;</span> <span class="mi">1000</span><span class="p">;</span> <span class="o">++</span><span class="n">i</span> <span class="p">)</span>
<span class="p">{</span>
<span class="n">uuid</span> <span class="n">u</span> <span class="o">=</span> <span class="n">bulkgen</span><span class="p">();</span>
<span class="c1">// do something with u</span>
<span class="p">}</span></code></pre>
</div>
</div>
</dd>
</dl>
</div>
</div>
</div>
<div class="sect2">
<h3 id="random_generator"><a class="link" href="#random_generator">&lt;boost/uuid/&#8203;random_generator.hpp&gt;</a></h3>
<div class="sect3">
<h4 id="random_generator_synopsis"><a class="link" href="#random_generator_synopsis">Synopsis</a></h4>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="cp">#include</span> <span class="cpf">&lt;boost/uuid/basic_random_generator.hpp&gt;</span><span class="cp">
</span>
<span class="k">namespace</span> <span class="n">boost</span> <span class="p">{</span>
<span class="k">namespace</span> <span class="n">uuids</span> <span class="p">{</span>
<span class="c1">// recommended for all uses</span>
<span class="k">class</span> <span class="nc">random_generator</span>
<span class="p">{</span>
<span class="nl">private:</span>
<span class="c1">// exposition only</span>
<span class="n"><em>unspecified</span><span class="o">-</span><span class="n">csprng</span><span class="o">-</span><span class="n">type</em></span> <span class="n">g_</span><span class="p">;</span>
<span class="nl">public:</span>
<span class="k">using</span> <span class="n">result_type</span> <span class="o">=</span> <span class="n">uuid</span><span class="p">;</span>
<span class="n">random_generator</span><span class="p">();</span>
<span class="n">result_type</span> <span class="k">operator</span><span class="p">()();</span>
<span class="p">};</span>
<span class="c1">// only provided for backward compatibility</span>
<span class="k">using</span> <span class="n">random_generator_mt19937</span> <span class="o">=</span> <span class="n">basic_random_generator</span><span class="o">&lt;</span><span class="n">std</span><span class="o">::</span><span class="n">mt19937</span><span class="o">&gt;</span><span class="p">;</span>
<span class="k">using</span> <span class="n">random_generator_pure</span> <span class="o">=</span> <span class="n">basic_random_generator</span><span class="o">&lt;</span><span class="n">std</span><span class="o">::</span><span class="n">random_device</span><span class="o">&gt;</span><span class="p">;</span>
<span class="p">}}</span> <span class="c1">// namespace boost::uuids</span></code></pre>
</div>
</div>
</div>
<div class="sect3">
<h4 id="random_generator_random_generator"><a class="link" href="#random_generator_random_generator">random_generator</a></h4>
<div class="paragraph">
<p>The class <code>random_generator</code> generates UUIDs using a cryptographically strong random number generator, seeded with entropy from <code>std::random_device</code>.
It&#8217;s the recommended way to generate version 4 random-based UUIDs.</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="n">random_generator</span><span class="p">();</span></code></pre>
</div>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Effects: </dt>
<dd>
<p>Initializes <code>g_</code>, an instance of a cryptographically strong
random number generator, using entropy obtained from <code>std::random_device</code>.</p>
</dd>
</dl>
</div>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="n">result_type</span> <span class="nf">operator</span><span class="p">()();</span></code></pre>
</div>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Effects: </dt>
<dd>
<p>Generates and returns a version 4 UUID using random numbers
obtained from <code>g_</code>.</p>
</dd>
<dt class="hdlist1">Example: </dt>
<dd>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="k">using</span> <span class="k">namespace</span> <span class="n">boost</span><span class="o">::</span><span class="n">uuids</span><span class="p">;</span>
<span class="n">random_generator</span> <span class="n">gen</span><span class="p">;</span>
<span class="n">uuid</span> <span class="n">u1</span> <span class="o">=</span> <span class="n">gen</span><span class="p">();</span>
<span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="n">u1</span> <span class="o">&lt;&lt;</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
<span class="n">uuid</span> <span class="n">u2</span> <span class="o">=</span> <span class="n">gen</span><span class="p">();</span>
<span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="n">u2</span> <span class="o">&lt;&lt;</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
<span class="n">assert</span><span class="p">(</span> <span class="n">u1</span> <span class="o">!=</span> <span class="n">u2</span> <span class="p">);</span></code></pre>
</div>
</div>
</dd>
</dl>
</div>
</div>
<div class="sect3">
<h4 id="random_generator_random_generator_mt19937"><a class="link" href="#random_generator_random_generator_mt19937">random_generator_mt19937</a></h4>
<div class="paragraph">
<p><code>random_generator_mt19937</code> is an alias for <code>basic_random_generator&lt;std::mt19937&gt;</code> and is only
provided for backward compatibility.</p>
</div>
</div>
<div class="sect3">
<h4 id="random_generator_random_generator_pure"><a class="link" href="#random_generator_random_generator_pure">random_generator_pure</a></h4>
<div class="paragraph">
<p><code>random_generator_pure</code> is an alias for <code>basic_random_generator&lt;std::random_device&gt;</code> and is only
provided for backward compatibility.</p>
</div>
</div>
</div>
<div class="sect2">
<h3 id="uuid_clock"><a class="link" href="#uuid_clock">&lt;boost/uuid/uuid_clock.hpp&gt;</a></h3>
<div class="sect3">
<h4 id="uuid_clock_synopsis"><a class="link" href="#uuid_clock_synopsis">Synopsis</a></h4>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="k">namespace</span> <span class="n">boost</span> <span class="p">{</span>
<span class="k">namespace</span> <span class="n">uuids</span> <span class="p">{</span>
<span class="k">class</span> <span class="nc">uuid_clock</span>
<span class="p">{</span>
<span class="nl">public:</span>
<span class="k">using</span> <span class="n">rep</span> <span class="o">=</span> <span class="n">std</span><span class="o">::</span><span class="kt">int64_t</span><span class="p">;</span>
<span class="k">using</span> <span class="n">period</span> <span class="o">=</span> <span class="n">std</span><span class="o">::</span><span class="n">ratio</span><span class="o">&lt;</span><span class="mi">1</span><span class="p">,</span> <span class="mi">10000000</span><span class="o">&gt;</span><span class="p">;</span> <span class="c1">// 100ns</span>
<span class="k">using</span> <span class="n">duration</span> <span class="o">=</span> <span class="n">std</span><span class="o">::</span><span class="n">chrono</span><span class="o">::</span><span class="n">duration</span><span class="o">&lt;</span><span class="n">rep</span><span class="p">,</span> <span class="n">period</span><span class="o">&gt;</span><span class="p">;</span>
<span class="k">using</span> <span class="n">time_point</span> <span class="o">=</span> <span class="n">std</span><span class="o">::</span><span class="n">chrono</span><span class="o">::</span><span class="n">time_point</span><span class="o">&lt;</span><span class="n">uuid_clock</span><span class="p">,</span> <span class="n">duration</span><span class="o">&gt;</span><span class="p">;</span>
<span class="k">static</span> <span class="k">constexpr</span> <span class="kt">bool</span> <span class="n">is_steady</span> <span class="o">=</span> <span class="nb">false</span><span class="p">;</span>
<span class="k">static</span> <span class="n">time_point</span> <span class="n">now</span><span class="p">()</span> <span class="k">noexcept</span><span class="p">;</span>
<span class="k">template</span><span class="o">&lt;</span><span class="k">class</span> <span class="nc">Duration</span><span class="p">&gt;</span>
<span class="k">static</span> <span class="n">time_point</span> <span class="n">from_sys</span><span class="p">(</span>
<span class="n">std</span><span class="o">::</span><span class="n">chrono</span><span class="o">::</span><span class="n">time_point</span><span class="o">&lt;</span><span class="n">std</span><span class="o">::</span><span class="n">chrono</span><span class="o">::</span><span class="n">system_clock</span><span class="p">,</span> <span class="n">Duration</span><span class="o">&gt;</span> <span class="k">const</span><span class="o">&amp;</span> <span class="n">tp</span> <span class="p">)</span> <span class="k">noexcept</span><span class="p">;</span>
<span class="k">static</span> <span class="n">std</span><span class="o">::</span><span class="n">chrono</span><span class="o">::</span><span class="n">time_point</span><span class="o">&lt;</span><span class="n">std</span><span class="o">::</span><span class="n">chrono</span><span class="o">::</span><span class="n">system_clock</span><span class="p">,</span> <span class="n">duration</span><span class="o">&gt;</span>
<span class="n">to_sys</span><span class="p">(</span> <span class="n">time_point</span> <span class="k">const</span><span class="o">&amp;</span> <span class="n">tp</span> <span class="p">)</span> <span class="k">noexcept</span><span class="p">;</span>
<span class="k">static</span> <span class="n">time_point</span> <span class="n">from_timestamp</span><span class="p">(</span> <span class="n">std</span><span class="o">::</span><span class="kt">uint64_t</span> <span class="n">timestamp</span> <span class="p">)</span> <span class="k">noexcept</span><span class="p">;</span>
<span class="k">static</span> <span class="n">std</span><span class="o">::</span><span class="kt">uint64_t</span> <span class="n">to_timestamp</span><span class="p">(</span> <span class="n">time_point</span> <span class="k">const</span><span class="o">&amp;</span> <span class="n">tp</span> <span class="p">)</span> <span class="k">noexcept</span><span class="p">;</span>
<span class="p">};</span>
<span class="p">}}</span> <span class="c1">// namespace boost::uuids</span></code></pre>
</div>
</div>
<div class="paragraph">
<p>The class <code>uuid_clock</code> is a <code>&lt;chrono&gt;</code>-compatible clock with an epoch of 00:00:00.00, 15 October 1582, and a resolution of 100 ns.
These values are specified in <a href="https://www.rfc-editor.org/rfc/rfc4122.html#section-4.1.4">RFC 4122 Section 4.1.4</a>.</p>
</div>
</div>
<div class="sect3">
<h4 id="uuid_clock_now"><a class="link" href="#uuid_clock_now">now</a></h4>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="k">static</span> <span class="n">time_point</span> <span class="n">now</span><span class="p">()</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
</div>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Returns: </dt>
<dd>
<p>The current system time (<code>std::chrono::system_clock::now()</code>, converted to <code>uuid_clock::time_point</code>).</p>
</dd>
</dl>
</div>
</div>
<div class="sect3">
<h4 id="uuid_clock_from_sys"><a class="link" href="#uuid_clock_from_sys">from_sys</a></h4>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="k">template</span><span class="o">&lt;</span><span class="k">class</span> <span class="nc">Duration</span><span class="p">&gt;</span>
<span class="k">static</span> <span class="n">time_point</span> <span class="n">from_sys</span><span class="p">(</span>
<span class="n">std</span><span class="o">::</span><span class="n">chrono</span><span class="o">::</span><span class="n">time_point</span><span class="o">&lt;</span><span class="n">std</span><span class="o">::</span><span class="n">chrono</span><span class="o">::</span><span class="n">system_clock</span><span class="p">,</span> <span class="n">Duration</span><span class="o">&gt;</span> <span class="k">const</span><span class="o">&amp;</span> <span class="n">tp</span> <span class="p">)</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
</div>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Returns: </dt>
<dd>
<p>The <code>uuid_clock::time_point</code> corresponding to <code>tp</code>.</p>
</dd>
</dl>
</div>
</div>
<div class="sect3">
<h4 id="uuid_clock_to_sys"><a class="link" href="#uuid_clock_to_sys">to_sys</a></h4>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="k">static</span> <span class="n">std</span><span class="o">::</span><span class="n">chrono</span><span class="o">::</span><span class="n">time_point</span><span class="o">&lt;</span><span class="n">std</span><span class="o">::</span><span class="n">chrono</span><span class="o">::</span><span class="n">system_clock</span><span class="p">,</span> <span class="n">duration</span><span class="o">&gt;</span>
<span class="n">to_sys</span><span class="p">(</span> <span class="n">time_point</span> <span class="k">const</span><span class="o">&amp;</span> <span class="n">tp</span> <span class="p">)</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
</div>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Returns: </dt>
<dd>
<p>The <code>std::chrono::system_clock::time_point</code> corresponding to <code>tp</code>.</p>
</dd>
<dt class="hdlist1">Example: </dt>
<dd>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="cp">#include</span> <span class="cpf">&lt;boost/uuid/time_generator_v1.hpp&gt;</span><span class="cp">
#include</span> <span class="cpf">&lt;boost/uuid/uuid.hpp&gt;</span><span class="cp">
#include</span> <span class="cpf">&lt;boost/uuid/uuid_clock.hpp&gt;</span><span class="cp">
#include</span> <span class="cpf">&lt;chrono&gt;</span><span class="cp">
</span>
<span class="k">using</span> <span class="k">namespace</span> <span class="n">boost</span><span class="o">::</span><span class="n">uuids</span><span class="p">;</span>
<span class="kt">int</span> <span class="nf">main</span><span class="p">()</span>
<span class="p">{</span>
<span class="n">time_generator_v1</span> <span class="n">gen</span><span class="p">;</span>
<span class="n">uuid</span> <span class="n">u</span> <span class="o">=</span> <span class="n">gen</span><span class="p">();</span> <span class="c1">// generates a version 1 time-based UUID</span>
<span class="c1">// note that stream output of std::chrono::system_clock::time_point requires C++20</span>
<span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="n">uuid_clock</span><span class="o">::</span><span class="n">to_sys</span><span class="p">(</span> <span class="n">u</span><span class="p">.</span><span class="n">time_point_v1</span><span class="p">()</span> <span class="p">)</span> <span class="o">&lt;&lt;</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
<span class="p">}</span></code></pre>
</div>
</div>
</dd>
</dl>
</div>
</div>
<div class="sect3">
<h4 id="uuid_clock_from_timestamp"><a class="link" href="#uuid_clock_from_timestamp">from_timestamp</a></h4>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="k">static</span> <span class="n">time_point</span> <span class="n">from_timestamp</span><span class="p">(</span> <span class="n">std</span><span class="o">::</span><span class="kt">uint64_t</span> <span class="n">timestamp</span> <span class="p">)</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
</div>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Returns: </dt>
<dd>
<p>The <code>uuid_clock::time_point</code> corresponding to <code>timestamp</code> 100 nanosecond intervals since the <code>uuid_clock</code> epoch.</p>
</dd>
</dl>
</div>
</div>
<div class="sect3">
<h4 id="uuid_clock_to_timestamp"><a class="link" href="#uuid_clock_to_timestamp">to_timestamp</a></h4>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="k">static</span> <span class="n">std</span><span class="o">::</span><span class="kt">uint64_t</span> <span class="n">to_timestamp</span><span class="p">(</span> <span class="n">time_point</span> <span class="k">const</span><span class="o">&amp;</span> <span class="n">tp</span> <span class="p">)</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
</div>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Returns: </dt>
<dd>
<p>The number of 100 nanosecond intervals since the <code>uuid_clock</code> epoch corresponding to <code>tp</code>.</p>
</dd>
<dt class="hdlist1">Example: </dt>
<dd>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="k">using</span> <span class="k">namespace</span> <span class="n">boost</span><span class="o">::</span><span class="n">uuids</span><span class="p">;</span>
<span class="n">uuid</span> <span class="n">u</span> <span class="o">=</span> <span class="n">time_generator_v1</span><span class="p">()();</span>
<span class="n">assert</span><span class="p">(</span> <span class="n">u</span><span class="p">.</span><span class="n">timestamp_v1</span><span class="p">()</span> <span class="o">==</span> <span class="n">uuid_clock</span><span class="o">::</span><span class="n">to_timestamp</span><span class="p">(</span> <span class="n">u</span><span class="p">.</span><span class="n">time_point_v1</span><span class="p">()</span> <span class="p">)</span> <span class="p">);</span></code></pre>
</div>
</div>
</dd>
</dl>
</div>
</div>
</div>
<div class="sect2">
<h3 id="time_generator_v1"><a class="link" href="#time_generator_v1">&lt;boost/uuid/&#8203;time_generator_v1.hpp&gt;</a></h3>
<div class="sect3">
<h4 id="time_generator_v1_synopsis"><a class="link" href="#time_generator_v1_synopsis">Synopsis</a></h4>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="k">namespace</span> <span class="n">boost</span> <span class="p">{</span>
<span class="k">namespace</span> <span class="n">uuids</span> <span class="p">{</span>
<span class="k">class</span> <span class="nc">time_generator_v1</span>
<span class="p">{</span>
<span class="nl">public:</span>
<span class="k">struct</span> <span class="nc">state_type</span>
<span class="p">{</span>
<span class="n">std</span><span class="o">::</span><span class="kt">uint64_t</span> <span class="n">timestamp</span><span class="p">;</span>
<span class="n">std</span><span class="o">::</span><span class="kt">uint16_t</span> <span class="n">clock_seq</span><span class="p">;</span>
<span class="p">};</span>
<span class="k">private</span><span class="o">:</span> <span class="c1">// exposition only</span>
<span class="n">uuid</span><span class="o">::</span><span class="n">node_type</span> <span class="n">node_</span> <span class="o">=</span> <span class="p">{};</span>
<span class="n">std</span><span class="o">::</span><span class="n">atomic</span><span class="o">&lt;</span><span class="n">state_type</span><span class="o">&gt;*</span> <span class="n">ps_</span> <span class="o">=</span> <span class="nb">nullptr</span><span class="p">;</span>
<span class="n">state_type</span> <span class="n">state_</span> <span class="o">=</span> <span class="p">{};</span>
<span class="k">public</span><span class="o">:</span>
<span class="k">using</span> <span class="n">result_type</span> <span class="o">=</span> <span class="n">uuid</span><span class="p">;</span>
<span class="n">time_generator_v1</span><span class="p">();</span>
<span class="n">time_generator_v1</span><span class="p">(</span> <span class="n">uuid</span><span class="o">::</span><span class="n">node_type</span> <span class="k">const</span><span class="o">&amp;</span> <span class="n">node</span><span class="p">,</span> <span class="n">state_type</span> <span class="k">const</span><span class="o">&amp;</span> <span class="n">state</span> <span class="p">)</span> <span class="k">noexcept</span><span class="p">;</span>
<span class="n">time_generator_v1</span><span class="p">(</span> <span class="n">uuid</span><span class="o">::</span><span class="n">node_type</span> <span class="k">const</span><span class="o">&amp;</span> <span class="n">node</span><span class="p">,</span> <span class="n">std</span><span class="o">::</span><span class="n">atomic</span><span class="o">&lt;</span><span class="n">state_type</span><span class="o">&gt;&amp;</span> <span class="n">state</span> <span class="p">)</span> <span class="k">noexcept</span><span class="p">;</span>
<span class="n">result_type</span> <span class="k">operator</span><span class="p">()()</span> <span class="k">noexcept</span><span class="p">;</span>
<span class="p">};</span>
<span class="p">}}</span> <span class="c1">// namespace boost::uuids</span></code></pre>
</div>
</div>
<div class="paragraph">
<p>The class <code>time_generator_v1</code> generates time-based version 1 UUIDs.
It supports three modes of operation.</p>
</div>
<div class="paragraph">
<p>The default and recommended one is by using its default constructor.
This instructs the generator to use a pseudorandom node identifier and initial clock sequence.</p>
</div>
<div class="paragraph">
<p>If more control over the node identifier (or the clock sequence) is desired,
for example,
if the generated UUIDs must use a specific node identifier that persists for the lifetime of the program or even across different program runs,
a constructor that takes a node identifier and a <code>state_type</code> is provided.
(The <code>timestamp</code> field of the provided <code>state_type</code> should generally be zero.)</p>
</div>
<div class="paragraph">
<p>Finally, if the program has several <code>time_generator_v1</code> instances (for example, one per thread) that need to use the same node identifier,
the third constructor takes a node identifier and a reference to <code>std::atomic&lt;state_type&gt;</code>.
The atomic state is used by the generators to ensure that no duplicate UUIDs are produced.</p>
</div>
</div>
<div class="sect3">
<h4 id="time_generator_v1_constructors"><a class="link" href="#time_generator_v1_constructors">Constructors</a></h4>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="n">time_generator_v1</span><span class="p">();</span></code></pre>
</div>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Effects: </dt>
<dd>
<p>Using entropy from <code>std::random_device</code>, generates a pseudorandom 48 bit node identifier in <code>node_</code> and a pseudorandom 14 bit clock sequence in <code>state_.clock_seq</code>. Initializes <code>state_.timestamp</code> to zero.</p>
</dd>
<dt class="hdlist1">Remarks: </dt>
<dd>
<p>The multicast bit of <code>node_</code> is set to denote a local node identifier, as recommended in <a href="https://www.rfc-editor.org/rfc/rfc4122.html#section-4.5">RFC 4122 Section 4.5</a>.</p>
</dd>
</dl>
</div>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="n">time_generator_v1</span><span class="p">(</span> <span class="n">uuid</span><span class="o">::</span><span class="n">node_type</span> <span class="k">const</span><span class="o">&amp;</span> <span class="n">node</span><span class="p">,</span> <span class="n">state_type</span> <span class="k">const</span><span class="o">&amp;</span> <span class="n">state</span> <span class="p">)</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
</div>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Effects: </dt>
<dd>
<p>Initializes <code>node_</code> to <code>node</code> and <code>state_</code> to <code>state</code>.</p>
</dd>
</dl>
</div>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="n">time_generator_v1</span><span class="p">(</span> <span class="n">uuid</span><span class="o">::</span><span class="n">node_type</span> <span class="k">const</span><span class="o">&amp;</span> <span class="n">node</span><span class="p">,</span> <span class="n">std</span><span class="o">::</span><span class="n">atomic</span><span class="o">&lt;</span><span class="n">state_type</span><span class="o">&gt;&amp;</span> <span class="n">state</span> <span class="p">)</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
</div>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Effects: </dt>
<dd>
<p>Initializes <code>node_</code> to <code>node</code> and <code>ps_</code> to <code>&amp;state</code>.</p>
</dd>
</dl>
</div>
</div>
<div class="sect3">
<h4 id="time_generator_v1_operator"><a class="link" href="#time_generator_v1_operator">operator()</a></h4>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="n">result_type</span> <span class="k">operator</span><span class="p">()()</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
</div>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Effects: </dt>
<dd>
<div class="paragraph">
<p>Using the state in <code>state_</code>, if <code>ps_</code> is <code>nullptr</code>, or the state in <code>*ps_</code>, if <code>ps_</code> is not <code>nullptr</code>,
atomically computes and sets a new state by retrieving the system time as if by <code>uuid_clock::now()</code>,
converting it to a timestamp as if by <code>uuid_clock::to_timestamp</code>,
storing the result in <code>state.timestamp</code>,
and incrementing <code>state.clock_seq</code> modulo 0x4000 if the new timestamp is lower than or equal to the previous timestamp.</p>
</div>
<div class="paragraph">
<p>Creates a version 1 UUID using the node identifier from <code>node_</code> and the new timestamp and clock sequence and returns it.</p>
</div>
</dd>
</dl>
</div>
</div>
</div>
<div class="sect2">
<h3 id="time_generator_v6"><a class="link" href="#time_generator_v6">&lt;boost/uuid/&#8203;time_generator_v6.hpp&gt;</a></h3>
<div class="sect3">
<h4 id="time_generator_v6_synopsis"><a class="link" href="#time_generator_v6_synopsis">Synopsis</a></h4>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="k">namespace</span> <span class="n">boost</span> <span class="p">{</span>
<span class="k">namespace</span> <span class="n">uuids</span> <span class="p">{</span>
<span class="k">class</span> <span class="nc">time_generator_v6</span>
<span class="p">{</span>
<span class="nl">public:</span>
<span class="k">struct</span> <span class="nc">state_type</span>
<span class="p">{</span>
<span class="n">std</span><span class="o">::</span><span class="kt">uint64_t</span> <span class="n">timestamp</span><span class="p">;</span>
<span class="n">std</span><span class="o">::</span><span class="kt">uint16_t</span> <span class="n">clock_seq</span><span class="p">;</span>
<span class="p">};</span>
<span class="k">private</span><span class="o">:</span> <span class="c1">// exposition only</span>
<span class="n">uuid</span><span class="o">::</span><span class="n">node_type</span> <span class="n">node_</span> <span class="o">=</span> <span class="p">{};</span>
<span class="n">std</span><span class="o">::</span><span class="n">atomic</span><span class="o">&lt;</span><span class="n">state_type</span><span class="o">&gt;*</span> <span class="n">ps_</span> <span class="o">=</span> <span class="nb">nullptr</span><span class="p">;</span>
<span class="n">state_type</span> <span class="n">state_</span> <span class="o">=</span> <span class="p">{};</span>
<span class="k">public</span><span class="o">:</span>
<span class="k">using</span> <span class="n">result_type</span> <span class="o">=</span> <span class="n">uuid</span><span class="p">;</span>
<span class="n">time_generator_v6</span><span class="p">();</span>
<span class="n">time_generator_v6</span><span class="p">(</span> <span class="n">uuid</span><span class="o">::</span><span class="n">node_type</span> <span class="k">const</span><span class="o">&amp;</span> <span class="n">node</span><span class="p">,</span> <span class="n">state_type</span> <span class="k">const</span><span class="o">&amp;</span> <span class="n">state</span> <span class="p">)</span> <span class="k">noexcept</span><span class="p">;</span>
<span class="n">time_generator_v6</span><span class="p">(</span> <span class="n">uuid</span><span class="o">::</span><span class="n">node_type</span> <span class="k">const</span><span class="o">&amp;</span> <span class="n">node</span><span class="p">,</span> <span class="n">std</span><span class="o">::</span><span class="n">atomic</span><span class="o">&lt;</span><span class="n">state_type</span><span class="o">&gt;&amp;</span> <span class="n">state</span> <span class="p">)</span> <span class="k">noexcept</span><span class="p">;</span>
<span class="n">result_type</span> <span class="k">operator</span><span class="p">()()</span> <span class="k">noexcept</span><span class="p">;</span>
<span class="p">};</span>
<span class="p">}}</span> <span class="c1">// namespace boost::uuids</span></code></pre>
</div>
</div>
<div class="paragraph">
<p>The class <code>time_generator_v6</code> generates time-based version 6 UUIDs, as described in <a href="https://datatracker.ietf.org/doc/rfc9562/">RFC 9562</a> section 5.6.</p>
</div>
<div class="paragraph">
<p>It operates in the exact same manner as <code>time_generator_v1</code>, with the only difference being that it produces version 6 UUIDs rather than version 1 ones.</p>
</div>
</div>
</div>
<div class="sect2">
<h3 id="time_generator_v7"><a class="link" href="#time_generator_v7">&lt;boost/uuid/&#8203;time_generator_v7.hpp&gt;</a></h3>
<div class="sect3">
<h4 id="time_generator_v7_synopsis"><a class="link" href="#time_generator_v7_synopsis">Synopsis</a></h4>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="k">namespace</span> <span class="n">boost</span> <span class="p">{</span>
<span class="k">namespace</span> <span class="n">uuids</span> <span class="p">{</span>
<span class="k">class</span> <span class="nc">time_generator_v7</span>
<span class="p">{</span>
<span class="nl">private:</span>
<span class="c1">// exposition only</span>
<span class="n"><em>unspecified</span><span class="o">-</span><span class="n">csprng</span><span class="o">-</span><span class="n">type</em></span> <span class="n">rng_</span><span class="p">;</span>
<span class="nl">public:</span>
<span class="k">using</span> <span class="n">result_type</span> <span class="o">=</span> <span class="n">uuid</span><span class="p">;</span>
<span class="n">time_generator_v7</span><span class="p">();</span>
<span class="n">time_generator_v7</span><span class="p">(</span> <span class="n">time_generator_v7</span> <span class="k">const</span><span class="o">&amp;</span> <span class="n">rhs</span> <span class="p">);</span>
<span class="n">time_generator_v7</span><span class="p">(</span> <span class="n">time_generator_v7</span><span class="o">&amp;&amp;</span> <span class="n">rhs</span> <span class="p">)</span> <span class="k">noexcept</span><span class="p">;</span>
<span class="n">time_generator_v7</span><span class="o">&amp;</span> <span class="k">operator</span><span class="o">=</span><span class="p">(</span> <span class="n">time_generator_v7</span> <span class="k">const</span><span class="o">&amp;</span> <span class="n">rhs</span> <span class="p">)</span> <span class="k">noexcept</span><span class="p">;</span>
<span class="n">time_generator_v7</span><span class="o">&amp;</span> <span class="k">operator</span><span class="o">=</span><span class="p">(</span> <span class="n">time_generator_v7</span><span class="o">&amp;&amp;</span> <span class="n">rhs</span> <span class="p">)</span> <span class="k">noexcept</span><span class="p">;</span>
<span class="n">result_type</span> <span class="k">operator</span><span class="p">()()</span> <span class="k">noexcept</span><span class="p">;</span>
<span class="p">};</span>
<span class="p">}}</span> <span class="c1">// namespace boost::uuids</span></code></pre>
</div>
</div>
<div class="paragraph">
<p>The class <code>time_generator_v7</code> generates time-based version 7 UUIDs, as described in <a href="https://datatracker.ietf.org/doc/rfc9562/">RFC 9562</a> section 5.7.</p>
</div>
</div>
<div class="sect3">
<h4 id="time_generator_v7_constructors"><a class="link" href="#time_generator_v7_constructors">Constructors</a></h4>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="n">time_generator_v7</span><span class="p">();</span></code></pre>
</div>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Effects: </dt>
<dd>
<p>Initializes the internal cryptographically strong pseudorandom number generator (CSPRNG) <code>rng_</code> using entropy from <code>std::random_device</code>.</p>
</dd>
</dl>
</div>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="n">time_generator_v7</span><span class="p">(</span> <span class="n">time_generator_v7</span> <span class="k">const</span><span class="o">&amp;</span> <span class="n">rhs</span> <span class="p">);</span></code></pre>
</div>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Effects: </dt>
<dd>
<p>Copies the state of <code>rhs</code> into <code>*this</code>, then reseeds <code>this-&gt;rng_</code> using entropy from <code>std::random_device</code>.</p>
</dd>
<dt class="hdlist1">Remarks: </dt>
<dd>
<p>Reseeding ensures that the two generators don&#8217;t produce the same random number sequence after the copy.</p>
</dd>
</dl>
</div>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="n">time_generator_v7</span><span class="p">(</span> <span class="n">time_generator_v7</span><span class="o">&amp;&amp;</span> <span class="n">rhs</span> <span class="p">)</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
</div>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Effects: </dt>
<dd>
<p>Copies the state of <code>rhs</code> into <code>*this</code>, then perturbs the state of <code>rhs.rng_</code> such that it no longer produces the same random number sequence.</p>
</dd>
</dl>
</div>
</div>
<div class="sect3">
<h4 id="time_generator_v7_assignment"><a class="link" href="#time_generator_v7_assignment">Assignment</a></h4>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="n">time_generator_v7</span><span class="o">&amp;</span> <span class="k">operator</span><span class="o">=</span><span class="p">(</span> <span class="n">time_generator_v7</span> <span class="k">const</span><span class="o">&amp;</span> <span class="n">rhs</span> <span class="p">)</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
</div>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Effects: </dt>
<dd>
<p>Copies the state of <code>rhs</code> into <code>*this</code>, except for <code>this-&gt;rng_</code>, which is left unmodified.</p>
</dd>
<dt class="hdlist1">Returns: </dt>
<dd>
<p><code>*this</code>.</p>
</dd>
<dt class="hdlist1">Remarks: </dt>
<dd>
<p>Not modifying <code>this-&gt;rng_</code> ensures that the two generators continue to produce different random numbers.</p>
</dd>
</dl>
</div>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="n">time_generator_v7</span><span class="o">&amp;</span> <span class="k">operator</span><span class="o">=</span><span class="p">(</span> <span class="n">time_generator_v7</span><span class="o">&amp;&amp;</span> <span class="n">rhs</span> <span class="p">)</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
</div>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Effects: </dt>
<dd>
<p>Copies the state of <code>rhs</code> into <code>*this</code>, then perturbs the state of <code>rhs.rng_</code> such that it no longer produces the same random number sequence.</p>
</dd>
<dt class="hdlist1">Returns: </dt>
<dd>
<p><code>*this</code>.</p>
</dd>
</dl>
</div>
</div>
<div class="sect3">
<h4 id="time_generator_v7_operator"><a class="link" href="#time_generator_v7_operator">operator()</a></h4>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="n">result_type</span> <span class="k">operator</span><span class="p">()()</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
</div>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Effects: </dt>
<dd>
<div class="olist arabic">
<ol class="arabic">
<li>
<p>Obtains a new timestamp as if by getting the system time from <code>std::chrono::system_clock::now()</code> and converting it to a number of microseconds from the Unix epoch.</p>
</li>
<li>
<p>Creates a new version 7 UUID and initializes its <code>unix_ts_ms</code> field with the number of milliseconds in the timestamp.</p>
</li>
<li>
<p>Initializes the <code>rand_a</code> field with the residual number of microseconds from the timestamp.</p>
</li>
<li>
<p>Initializes the 6 bits of the <code>rand_b</code> field following the variant to a conflict resolution counter, such that if more than one UUID is generated using the same timestamp, monotonicity is still ensured.</p>
</li>
<li>
<p>Initializes the rest of the <code>rand_b</code> field to random values obtained from the internal CSPRNG <code>rng_</code>.</p>
</li>
<li>
<p>Returns the UUID.</p>
</li>
</ol>
</div>
</dd>
<dt class="hdlist1">Remarks: </dt>
<dd>
<p><code>operator()</code> generates a monotonically increasing sequence of UUIDs, if the following requirements are met:</p>
<div class="ulist">
<ul>
<li>
<p>The system clock never goes backwards.</p>
</li>
<li>
<p>The system clock has at least millisecond resolution.</p>
</li>
<li>
<p>No more than 64 UUIDs are generated per microsecond (no more than one every 16 nanoseconds).</p>
</li>
</ul>
</div>
</dd>
</dl>
</div>
</div>
</div>
<div class="sect2">
<h3 id="time_generator"><a class="link" href="#time_generator">&lt;boost/uuid/time_generator.hpp&gt;</a></h3>
<div class="sect3">
<h4 id="time_generator_synopsis"><a class="link" href="#time_generator_synopsis">Synopsis</a></h4>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="cp">#include</span> <span class="cpf">&lt;boost/uuid/time_generator_v1.hpp&gt;</span><span class="cp">
#include</span> <span class="cpf">&lt;boost/uuid/time_generator_v6.hpp&gt;</span><span class="cp">
#include</span> <span class="cpf">&lt;boost/uuid/time_generator_v7.hpp&gt;</span></code></pre>
</div>
</div>
<div class="paragraph">
<p>This convenience header makes the three time-based generators <code>time_generator_v1</code>, <code>time_generator_v6</code>, and <code>time_generator_v7</code>, available.</p>
</div>
</div>
</div>
<div class="sect2">
<h3 id="constants"><a class="link" href="#constants">&lt;boost/uuid/constants.hpp&gt;</a></h3>
<div class="sect3">
<h4 id="constants_synopsis"><a class="link" href="#constants_synopsis">Synopsis</a></h4>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="cp">#include</span> <span class="cpf">&lt;boost/uuid/namespaces.hpp&gt;</span><span class="cp">
</span>
<span class="k">namespace</span> <span class="n">boost</span> <span class="p">{</span>
<span class="k">namespace</span> <span class="n">uuids</span> <span class="p">{</span>
<span class="n">uuid</span> <span class="n">nil_uuid</span><span class="p">()</span> <span class="k">noexcept</span><span class="p">;</span>
<span class="p">}}</span> <span class="c1">// namespace boost::uuids</span></code></pre>
</div>
</div>
</div>
<div class="sect3">
<h4 id="constants_constants"><a class="link" href="#constants_constants">Constants</a></h4>
<div class="paragraph">
<p>This header provides definitions of some well known UUID constants.</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="n">uuid</span> <span class="n">nil_uuid</span><span class="p">()</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
</div>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Returns: </dt>
<dd>
<p>The nil UUID, <code>{00000000-0000-0000-0000-000000000000}</code>.</p>
</dd>
</dl>
</div>
</div>
</div>
<div class="sect2">
<h3 id="design_notes"><a class="link" href="#design_notes">Design Notes</a></h3>
<div class="paragraph">
<p>The document <a href="http://www.itu.int/ITU-T/studygroups/com17/oid/X.667-E.pdf" class="bare">http://www.itu.int/ITU-T/studygroups/com17/oid/X.667-E.pdf</a> was used to design and implement the <code>uuid</code> struct.</p>
</div>
<div class="paragraph">
<p>All functions are re-entrant. Classes are as thread-safe as an int. That is an instance cannot be shared between threads without proper synchronization.</p>
</div>
</div>
<div class="sect2">
<h3 id="acknowledgements"><a class="link" href="#acknowledgements">Acknowledgements</a></h3>
<div class="paragraph">
<p>A number of people on the <a href="https://www.boost.org/">boost.org</a> mailing list provided useful comments and greatly helped to shape the library.</p>
</div>
<div class="paragraph">
<p>The documentation was converted to Asciidoc format by Christian Mazakas.</p>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="copyright"><a class="link" href="#copyright">Copyright and License</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Copyright 2006 Andy Tompkins</p>
</div>
<div class="paragraph">
<p>Copyright 2017 James E. King III</p>
</div>
<div class="paragraph">
<p>Copyright 2024 Christian Mazakas</p>
</div>
<div class="paragraph">
<p>Copyright 2024-2026 Peter Dimov</p>
</div>
<div class="paragraph">
<p>Distributed under the <a href="http://www.boost.org/LICENSE_1_0.txt">Boost Software License, Version 1.0</a>.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="history"><a class="link" href="#history">Old Revision History</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>This section contains the old revision history that used to
be maintained as comments in the library header files.</p>
</div>
<div class="sect2">
<h3 id="history_boostuuiduuid_hpp"><a class="link" href="#history_boostuuiduuid_hpp">boost/uuid/uuid.hpp</a></h3>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="c1">// Revision History</span>
<span class="c1">// 06 Feb 2006 - Initial Revision</span>
<span class="c1">// 09 Nov 2006 - fixed variant and version bits for v4 guids</span>
<span class="c1">// 13 Nov 2006 - added serialization</span>
<span class="c1">// 17 Nov 2006 - added name-based guid creation</span>
<span class="c1">// 20 Nov 2006 - add fixes for gcc (from Tim Blechmann)</span>
<span class="c1">// 07 Mar 2007 - converted to header only</span>
<span class="c1">// 10 May 2007 - removed need for Boost.Thread</span>
<span class="c1">// - added better seed - thanks Peter Dimov</span>
<span class="c1">// - removed null()</span>
<span class="c1">// - replaced byte_count() and output_bytes() with size() and begin() and end()</span>
<span class="c1">// 11 May 2007 - fixed guid(ByteInputIterator first, ByteInputIterator last)</span>
<span class="c1">// - optimized operator&gt;&gt;</span>
<span class="c1">// 14 May 2007 - converted from guid to uuid</span>
<span class="c1">// 29 May 2007 - uses new implementation of sha1</span>
<span class="c1">// 01 Jun 2007 - removed using namespace directives</span>
<span class="c1">// 09 Nov 2007 - moved implementation to uuid.ipp file</span>
<span class="c1">// 12 Nov 2007 - moved serialize code to uuid_serialize.hpp file</span>
<span class="c1">// 25 Feb 2008 - moved to namespace boost::uuids</span>
<span class="c1">// 19 Mar 2009 - changed to a POD, reorganized files</span>
<span class="c1">// 28 Nov 2009 - disabled deprecated warnings for MSVC</span>
<span class="c1">// 30 Nov 2009 - used BOOST_STATIC_CONSTANT</span>
<span class="c1">// 02 Dec 2009 - removed BOOST_STATIC_CONSTANT - not all compilers like it</span>
<span class="c1">// 29 Apr 2013 - added support for noexcept and constexpr, added optimizations for SSE/AVX</span></code></pre>
</div>
</div>
</div>
<div class="sect2">
<h3 id="history_boostuuiduuid_io_hpp"><a class="link" href="#history_boostuuiduuid_io_hpp">boost/uuid/uuid_io.hpp</a></h3>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="c1">// Revision History</span>
<span class="c1">// 20 Mar 2009 - Initial Revision</span>
<span class="c1">// 28 Nov 2009 - disabled deprecated warnings for MSVC</span></code></pre>
</div>
</div>
</div>
<div class="sect2">
<h3 id="history_boostuuiddetailsha1_hpp"><a class="link" href="#history_boostuuiddetailsha1_hpp">boost/uuid/detail/sha1.hpp</a></h3>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c++"><span class="c1">// Revision History</span>
<span class="c1">// 29 May 2007 - Initial Revision</span>
<span class="c1">// 25 Feb 2008 - moved to namespace boost::uuids::detail</span>
<span class="c1">// 10 Jan 2012 - can now handle the full size of messages (2^64 - 1 bits)</span></code></pre>
</div>
</div>
</div>
</div>
</div>
</div>
</body>
</html>