Files
tomlplusplus/index.html
2020-07-30 20:38:03 +00:00

393 lines
50 KiB
HTML

<!DOCTYPE html>
<html lang="en"><head>
<meta charset="utf-8"/>
<title>toml++ TOML
for
modern
C++</title>
<link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:400,400i,600,600i%7CSource+Code+Pro:400,400i,600" rel="stylesheet"/>
<link href="m-dark+documentation.compiled.css" rel="stylesheet"/>
<link href="muu.css" rel="stylesheet"/>
<link href="favicon.ico" rel="icon" type="image/vnd.microsoft.icon"/>
<meta content="width=device-width, initial-scale=1.0" name="viewport"/>
<meta content="#22272e" name="theme-color"/>
<meta content="gbtcNgKlNiPSMKkYMw4zWFVWGPH_oU93m9n_-nb4qK8" name="google-site-verification"/>
<meta content="Header-only
TOML
config
file
parser
and
serializer
for
modern
C++." name="description"/>
<script src="muu.js"></script>
</head>
<body>
<header><nav id="navigation">
<div class="m-container">
<div class="m-row">
<a class="m-col-t-8 m-col-m-none m-left-m" href="index.html" id="m-navbar-brand"><img alt="" src="logo.png"/>toml++ <span class="m-thin">TOML
for
modern
C++</span></a>
<div class="m-col-t-4 m-hide-m m-text-right m-nopadr">
<a class="m-doc-search-icon" href="#search" onclick="return showSearch()" title="Search"><svg style="height: 0.9rem;" viewBox="0 0 16 16">
<path d="m6 0c-3.31 0-6 2.69-6 6 0 3.31 2.69 6 6 6 1.49 0 2.85-0.541 3.89-1.44-0.0164 0.338 0.147 0.759 0.5 1.15l3.22 3.79c0.552 0.614 1.45 0.665 2 0.115 0.55-0.55 0.499-1.45-0.115-2l-3.79-3.22c-0.392-0.353-0.812-0.515-1.15-0.5 0.895-1.05 1.44-2.41 1.44-3.89 0-3.31-2.69-6-6-6zm0 1.56a4.44 4.44 0 0 1 4.44 4.44 4.44 4.44 0 0 1-4.44 4.44 4.44 4.44 0 0 1-4.44-4.44 4.44 4.44 0 0 1 4.44-4.44z" id="m-doc-search-icon-path"></path>
</svg></a>
<a href="#navigation" id="m-navbar-show" title="Show navigation"></a>
<a href="#" id="m-navbar-hide" title="Hide navigation"></a>
</div>
<div class="m-col-t-12 m-show-m m-col-m-none m-right-m" id="m-navbar-collapse">
<div class="m-row">
<ol class="m-col-t-6 m-col-m-none">
<li><a href="namespaces.html">Namespaces</a></li>
</ol>
<ol class="m-col-t-6 m-col-m-none" start="2">
<li><a href="annotated.html">Classes</a></li>
<li><a class="github muu-external" href="https://github.com/marzer/tomlplusplus/" target="_blank">Github</a></li>
<li class="m-show-m"><a class="m-doc-search-icon" href="#search" onclick="return showSearch()" title="Search"><svg style="height: 0.9rem;" viewBox="0 0 16 16">
<use href="#m-doc-search-icon-path"></use>
</svg></a></li>
</ol>
</div>
</div>
</div>
</div>
</nav></header>
<main><article>
<div class="m-container m-container-inflatable">
<div class="m-row">
<div class="m-col-l-10 m-push-l-1">
<img alt="Image" class="m-image" src="banner_small.png" style="width: 1280px;"/><div class="gh-badges"><a class="muu-external" href="https://github.com/marzer/tomlplusplus/releases" target="_blank"><img alt="Releases" src="https://img.shields.io/github/v/release/marzer/tomlplusplus?style=flat-square"/></a><a class="muu-external" href="https://en.cppreference.com/w/cpp/compiler_support" target="_blank"><img alt="C++17" src="badge-C++17.svg"/></a><a class="muu-external" href="https://en.cppreference.com/w/cpp/compiler_support" target="_blank"><img alt="C++20" src="badge-C++20.svg"/></a><a class="muu-external" href="https://toml.io/en/v1.0.0-rc.1" target="_blank"><img alt="TOML v1.0.0-rc.1" src="badge-TOML.svg"/></a><br/><a class="muu-external" href="https://github.com/marzer/tomlplusplus/blob/master/LICENSE" target="_blank"><img alt="MIT License" src="badge-license-MIT.svg"/></a><a class="muu-external" href="https://circleci.com/gh/marzer/tomlplusplus" target="_blank"><img alt="CircleCI" src="https://img.shields.io/circleci/build/github/marzer/tomlplusplus?label=circle%20ci&amp;logo=circleci&amp;logoColor=white&amp;style=flat-square"/></a><a class="muu-external" href="https://github.com/fffaraz/awesome-cpp" target="_blank"><img alt="Mentioned in Awesome C++" src="badge-awesome.svg"/></a></div>
<div class="m-block m-default">
<h3>Contents</h3>
<ul>
<li><a href="#mainpage-features">Features</a></li>
<li><a href="#mainpage-api-documentation">API documentation</a></li>
<li>
<a href="#mainpage-example">Basic examples</a>
<ul>
<li><a href="#mainpage-example-parsing-files">Parsing files</a></li>
<li><a href="#mainpage-example-parsing-strings">Parsing strings and iostreams</a></li>
<li><a href="#mainpage-example-parsing-without-exceptions">Handling errors without exceptions</a></li>
<li><a href="#mainpage-example-custom-error-formatting">Custom error formatting</a></li>
<li><a href="#mainpage-example-manipulations">Working with TOML data</a></li>
<li><a href="#mainpage-example-serialization">Serializing as TOML and JSON</a></li>
<li><a href="#mainpage-example-speed-up-compilation">Speeding up compilation</a></li>
</ul>
</li>
<li>
<a href="#mainpage-adding-lib">Adding toml++ to your project</a>
<ul>
<li><a href="#mainpage-adding-lib-old-school">"The old fashioned way"</a></li>
<li><a href="#mainpage-adding-lib-meson">Meson</a></li>
<li><a href="#mainpage-adding-lib-conan">Conan</a></li>
<li><a href="#mainpage-adding-lib-vcpkg">Vcpkg</a></li>
<li><a href="#mainpage-adding-lib-other">Other environments and package managers</a></li>
<li><a href="#mainpage-adding-lib-python">Special mention: Python</a></li>
</ul>
</li>
<li><a href="#mainpage-configuration">Library configuration options</a></li>
<li><a href="#mainpage-contributing">Contributing</a></li>
<li><a href="#mainpage-license">License</a></li>
<li><a href="#mainpage-contact">Contacting the author</a></li>
</ul>
</div>
<section id="mainpage-features"><h2><a href="#mainpage-features">Features</a></h2><ul><li>Supports the latest <a class="muu-external" href="https://toml.io/" target="_blank">TOML</a> release (<a class="muu-external" href="https://toml.io/en/v1.0.0-rc.1" target="_blank">v1.0.0-rc.1</a>), plus optional support for some unreleased TOML features</li><li>Supports serializing to JSON</li><li>Proper UTF-8 handling (incl. BOM)</li><li>C++17 (plus some C++20 features where available, e.g. experimental support for <a class="m-doc muu-injected muu-external" href="https://en.cppreference.com/w/cpp/language/types#Character_types" target="_blank">char8_t</a> strings)</li><li>Header-only (optional!)</li><li>Doesn't require RTTI</li><li>Works with or without exceptions</li><li>Tested on Clang (6+), GCC (7+) and MSVC (VS2019)</li><li>Tested on x64, x86 and ARM</li></ul></section><section id="mainpage-api-documentation"><h2><a href="#mainpage-api-documentation">API documentation</a></h2><p>You're looking at it! Browse the docs using the links at the top of the page. You can search from anywhere by pressing the TAB key.</p></section><section id="mainpage-example"><h2><a href="#mainpage-example">Basic examples</a></h2><section id="mainpage-example-parsing-files"><h3><a href="#mainpage-example-parsing-files">Parsing files</a></h3><p>Call <a class="m-doc" href="namespacetoml.html#a3ed2791fdc270afa33bc0cb1a902c7df">toml::<wbr/>parse_file()</a> and work with the <a class="m-doc" href="classtoml_1_1table.html">toml::<wbr/>table</a> you get back, or handle any <a class="m-doc" href="classtoml_1_1parse__error.html">toml::<wbr/>parse_error</a> that gets thrown:</p><pre class="m-code"><span class="cp">#include</span> <span class="cpf">&lt;iostream&gt;</span><span class="cp"></span>
<span class="cp">#include</span> <span class="cpf">&lt;fstream&gt; //required for parse_file()</span><span class="cp"></span>
<span class="cp">#include</span> <span class="cpf">&lt;toml++/toml.h&gt;</span><span class="cp"></span>
<span class="ut">int</span> <span class="nf">main</span><span class="p">(</span><span class="ut">int</span> <span class="n">argc</span><span class="p">,</span> <span class="ut">char</span><span class="o">**</span> <span class="n">argv</span><span class="p">)</span>
<span class="p">{</span>
<span class="ns">toml::</span><span class="ut">table</span> <span class="n">tbl</span><span class="p">;</span>
<span class="k">try</span>
<span class="p">{</span>
<span class="n">tbl</span> <span class="o">=</span> <span class="ns">toml::</span><span class="n">parse_file</span><span class="p">(</span><span class="n">argv</span><span class="p">[</span><span class="mi">1</span><span class="p">]);</span>
<span class="ns">std::</span><span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="n">tbl</span> <span class="o">&lt;&lt;</span> <span class="ns">std::</span><span class="n">endl</span><span class="p">;</span>
<span class="p">}</span>
<span class="k">catch</span> <span class="p">(</span><span class="k">const</span> <span class="ns">toml::</span><span class="ut">parse_error</span><span class="o">&amp;</span> <span class="n">err</span><span class="p">)</span>
<span class="p">{</span>
<span class="ns">std::</span><span class="n">cerr</span> <span class="o">&lt;&lt;</span> <span class="s">"Parsing failed:</span><span class="se">\n</span><span class="s">"</span> <span class="o">&lt;&lt;</span> <span class="n">err</span> <span class="o">&lt;&lt;</span> <span class="ns">std::</span><span class="n">endl</span><span class="p">;</span>
<span class="k">return</span> <span class="mi">1</span><span class="p">;</span>
<span class="p">}</span>
<span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
<span class="p">}</span></pre><div class="m-note m-warning"><h4>Don't forget <code>#include &lt;fstream&gt;</code>!</h4><p>Not everyone who uses the library is going to work directly from files, so not everybody is forced to pay the compilation overhead of including <code>&lt;fstream&gt;</code>. You need to explicitly include it if you're going to be calling <a class="m-doc" href="namespacetoml.html#a3ed2791fdc270afa33bc0cb1a902c7df">toml::<wbr/>parse_file()</a>.</p></div><aside class="m-note m-default"><h4>See also</h4><ul><li><a class="m-doc" href="namespacetoml.html#a3ed2791fdc270afa33bc0cb1a902c7df">toml::<wbr/>parse_file()</a><br/></li><li><a class="m-doc" href="classtoml_1_1table.html">toml::<wbr/>table</a><br/></li><li><a class="m-doc" href="classtoml_1_1parse__error.html">toml::<wbr/>parse_error</a></li></ul></aside></section><section id="mainpage-example-parsing-strings"><h3><a href="#mainpage-example-parsing-strings">Parsing strings and iostreams</a></h3><p>Call <a class="m-doc" href="namespacetoml.html#ada8654fb4ceef15c20fc1d5e0cc734dd">toml::<wbr/>parse()</a> and work with the <a class="m-doc" href="classtoml_1_1table.html">toml::<wbr/>table</a> you get back, or handle any <a class="m-doc" href="classtoml_1_1parse__error.html">toml::<wbr/>parse_error</a> that gets thrown:</p><pre class="m-code"><p class="m-note m-success godbolt"><a class="muu-external godbolt" href="https://godbolt.org/z/NsR-xf" target="_blank">Try this code on Compiler Explorer</a></p><span class="cp">#include</span> <span class="cpf">&lt;iostream&gt;</span><span class="cp"></span>
<span class="cp">#include</span> <span class="cpf">&lt;sstream&gt;</span><span class="cp"></span>
<span class="cp">#include</span> <span class="cpf">&lt;toml++/toml.h&gt;</span><span class="cp"></span>
<span class="k">using</span> <span class="k">namespace</span> <span class="ns">std::</span><span class="n">string_view_literals</span><span class="p">;</span>
<span class="ut">int</span> <span class="nf">main</span><span class="p">()</span>
<span class="p">{</span>
<span class="k">static</span> <span class="k">constexpr</span> <span class="ns">std::</span><span class="ut">string_view</span> <span class="n">some_toml</span> <span class="o">=</span> <span class="sa">R</span><span class="s">"</span><span class="dl">(</span><span class="s"></span>
<span class="s"> [library]</span>
<span class="s"> name = "toml++"</span>
<span class="s"> authors = ["Mark Gillard &lt;mark.gillard@outlook.com.au&gt;"]</span>
<span class="s"> cpp = 17</span>
<span class="s"> </span><span class="dl">)</span><span class="s">"</span><span class="sa">sv</span><span class="p">;</span>
<span class="k">try</span>
<span class="p">{</span>
<span class="c1">// parse directly from a string view:</span>
<span class="p">{</span>
<span class="ns">toml::</span><span class="ut">table</span> <span class="n">tbl</span> <span class="o">=</span> <span class="ns">toml::</span><span class="n">parse</span><span class="p">(</span><span class="n">some_toml</span><span class="p">);</span>
<span class="ns">std::</span><span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="n">tbl</span> <span class="o">&lt;&lt;</span> <span class="s">"</span><span class="se">\n</span><span class="s">"</span><span class="p">;</span>
<span class="p">}</span>
<span class="c1">// parse from a string stream:</span>
<span class="p">{</span>
<span class="ns">std::</span><span class="ut">stringstream</span> <span class="n">ss</span><span class="p">{</span> <span class="ns">std::</span><span class="ut">string</span><span class="p">{</span> <span class="n">some_toml</span> <span class="p">}</span> <span class="p">};</span>
<span class="ns">toml::</span><span class="ut">table</span> <span class="n">tbl</span> <span class="o">=</span> <span class="ns">toml::</span><span class="n">parse</span><span class="p">(</span><span class="n">ss</span><span class="p">);</span>
<span class="ns">std::</span><span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="n">tbl</span> <span class="o">&lt;&lt;</span> <span class="s">"</span><span class="se">\n</span><span class="s">"</span><span class="p">;</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="k">catch</span> <span class="p">(</span><span class="k">const</span> <span class="ns">toml::</span><span class="ut">parse_error</span><span class="o">&amp;</span> <span class="n">err</span><span class="p">)</span>
<span class="p">{</span>
<span class="ns">std::</span><span class="n">cerr</span> <span class="o">&lt;&lt;</span> <span class="s">"Parsing failed:</span><span class="se">\n</span><span class="s">"</span> <span class="o">&lt;&lt;</span> <span class="n">err</span> <span class="o">&lt;&lt;</span> <span class="s">"</span><span class="se">\n</span><span class="s">"</span><span class="p">;</span>
<span class="k">return</span> <span class="mi">1</span><span class="p">;</span>
<span class="p">}</span>
<span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
<span class="p">}</span></pre><pre class="m-console"><span class="go">[library]</span>
<span class="go">authors = [ 'Mark Gillard &lt;mark.gillard@outlook.com.au&gt;' ]</span>
<span class="go">cpp = 17</span>
<span class="go">name = 'toml++'</span>
<span class="go">[library]</span>
<span class="go">authors = [ 'Mark Gillard &lt;mark.gillard@outlook.com.au&gt;' ]</span>
<span class="go">cpp = 17</span>
<span class="go">name = 'toml++'</span></pre><aside class="m-note m-default"><h4>See also</h4><ul><li><a class="m-doc" href="namespacetoml.html#a3ed2791fdc270afa33bc0cb1a902c7df">toml::<wbr/>parse_file()</a><br/></li><li><a class="m-doc" href="classtoml_1_1table.html">toml::<wbr/>table</a><br/></li><li><a class="m-doc" href="classtoml_1_1parse__error.html">toml::<wbr/>parse_error</a></li></ul></aside></section><section id="mainpage-example-parsing-without-exceptions"><h3><a href="#mainpage-example-parsing-without-exceptions">Handling errors without exceptions</a></h3><p>Can't (or won't) use exceptions? That's fine too. You can disable exceptions in your compiler flags and/or explicitly disable the library's use of them by setting the option <a class="m-doc" href="group__configuration.html#ga93097ecd88ca4bca393f60a78bda643b">TOML_<wbr/>EXCEPTIONS</a> to <code>0</code>. In either case, the parsing functions return a <a class="m-doc" href="classtoml_1_1parse__result.html">toml::<wbr/>parse_result</a> instead of a <a class="m-doc" href="classtoml_1_1table.html">toml::<wbr/>table</a>:</p><pre class="m-code"><span class="cp">#include</span> <span class="cpf">&lt;iostream&gt;</span><span class="cp"></span>
<span class="cp">#include</span> <span class="cpf">&lt;fstream&gt;</span><span class="cp"></span>
<span class="cp">#define TOML_EXCEPTIONS 0 </span><span class="c1">// only necessary if you've left them enabled in your compiler</span>
<span class="cp">#include</span> <span class="cpf">&lt;toml++/toml.h&gt;</span><span class="cp"></span>
<span class="ut">int</span> <span class="nf">main</span><span class="p">()</span>
<span class="p">{</span>
<span class="ns">toml::</span><span class="ut">parse_result</span> <span class="n">result</span> <span class="o">=</span> <span class="ns">toml::</span><span class="n">parse_file</span><span class="p">(</span><span class="s">"configuration.toml"</span><span class="p">);</span>
<span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">result</span><span class="p">)</span>
<span class="p">{</span>
<span class="ns">std::</span><span class="n">cerr</span> <span class="o">&lt;&lt;</span> <span class="s">"Parsing failed:</span><span class="se">\n</span><span class="s">"</span> <span class="o">&lt;&lt;</span> <span class="n">result</span><span class="p">.</span><span class="n">error</span><span class="p">()</span> <span class="o">&lt;&lt;</span> <span class="s">"</span><span class="se">\n</span><span class="s">"</span><span class="p">;</span>
<span class="k">return</span> <span class="mi">1</span><span class="p">;</span>
<span class="p">}</span>
<span class="n">do_stuff_with_your_config</span><span class="p">(</span><span class="ns">std::</span><span class="n">move</span><span class="p">(</span><span class="n">result</span><span class="p">).</span><span class="ut">table</span><span class="p">());</span> <span class="c1">// 'steal' the table from the result</span>
<span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
<span class="p">}</span></pre></section><section id="mainpage-example-custom-error-formatting"><h3><a href="#mainpage-example-custom-error-formatting">Custom error formatting</a></h3><p>The examples above use an overloaded <code>operator&lt;&lt;</code> with ostreams to print basic error messages, and look like this:</p><pre class="m-console"><span class="go">Error while parsing key: expected bare key starting character or string delimiter, saw '?'</span>
<span class="go"> (error occurred at line 2, column 5)</span></pre><p>In order to keep the library as small as possible I haven't bent over backwards to support things like custom colouring of the text in TTY environments, et cetera. That being said, the library provides the requisite information for you to build these yourself if necessary via <a class="m-doc" href="classtoml_1_1parse__error.html">toml::<wbr/>parse_error</a>'s source() and description() members:</p><pre class="m-code"><span class="ns">toml::</span><span class="ut">table</span> <span class="n">tbl</span><span class="p">;</span>
<span class="k">try</span>
<span class="p">{</span>
<span class="n">tbl</span> <span class="o">=</span> <span class="ns">toml::</span><span class="n">parse_file</span><span class="p">(</span><span class="s">"configuration.toml"</span><span class="p">);</span>
<span class="p">}</span>
<span class="k">catch</span> <span class="p">(</span><span class="k">const</span> <span class="ns">toml::</span><span class="ut">parse_error</span><span class="o">&amp;</span> <span class="n">err</span><span class="p">)</span>
<span class="p">{</span>
<span class="ns">std::</span><span class="n">cerr</span>
<span class="o">&lt;&lt;</span> <span class="s">"Error parsing file '"</span> <span class="o">&lt;&lt;</span> <span class="o">*</span><span class="n">err</span><span class="p">.</span><span class="n">source</span><span class="p">().</span><span class="n">path</span>
<span class="o">&lt;&lt;</span> <span class="s">"':</span><span class="se">\n</span><span class="s">"</span> <span class="o">&lt;&lt;</span> <span class="n">err</span><span class="p">.</span><span class="n">description</span><span class="p">()</span>
<span class="o">&lt;&lt;</span> <span class="s">"</span><span class="se">\n</span><span class="s"> ("</span> <span class="o">&lt;&lt;</span> <span class="n">err</span><span class="p">.</span><span class="n">source</span><span class="p">().</span><span class="n">begin</span> <span class="o">&lt;&lt;</span> <span class="s">")</span><span class="se">\n</span><span class="s">"</span><span class="p">;</span>
<span class="k">return</span> <span class="mi">1</span><span class="p">;</span>
<span class="p">}</span></pre><aside class="m-note m-default"><h4>See also</h4><ul><li><a class="m-doc" href="classtoml_1_1parse__error.html">toml::<wbr/>parse_error</a><br/></li><li><a class="m-doc" href="structtoml_1_1source__region.html">toml::<wbr/>source_region</a><br/></li><li><a class="m-doc" href="structtoml_1_1source__position.html">toml::<wbr/>source_position</a></li></ul></aside></section><section id="mainpage-example-manipulations"><h3><a href="#mainpage-example-manipulations">Working with TOML data</a></h3><p>A TOML document is a tree of values, arrays and tables, represented as the <a class="m-doc" href="classtoml_1_1value.html">toml::<wbr/>value</a>, <a class="m-doc" href="classtoml_1_1array.html">toml::<wbr/>array</a> and <a class="m-doc" href="classtoml_1_1table.html">toml::<wbr/>table</a>, respectively. All three inherit from <a class="m-doc" href="classtoml_1_1node.html">toml::<wbr/>node</a>, and can be easily accessed via the <a class="m-doc" href="classtoml_1_1node__view.html">toml::<wbr/>node_view</a>:</p><pre class="m-code"><p class="m-note m-success godbolt"><a class="muu-external godbolt" href="https://godbolt.org/z/7z6GGW" target="_blank">Try this code on Compiler Explorer</a></p><span class="cp">#include</span> <span class="cpf">&lt;iostream&gt;</span><span class="cp"></span>
<span class="cp">#include</span> <span class="cpf">&lt;toml++/toml.h&gt;</span><span class="cp"></span>
<span class="k">using</span> <span class="k">namespace</span> <span class="ns">std::</span><span class="n">string_view_literals</span><span class="p">;</span>
<span class="ut">int</span> <span class="nf">main</span><span class="p">()</span>
<span class="p">{</span>
<span class="k">static</span> <span class="k">constexpr</span> <span class="k">auto</span> <span class="n">source</span> <span class="o">=</span> <span class="sa">R</span><span class="s">"</span><span class="dl">(</span><span class="s"></span>
<span class="s"> str = "hello world"</span>
<span class="s"> </span>
<span class="s"> numbers = [ 1, 2, 3, "four", 5.0 ]</span>
<span class="s"> vegetables = [ "tomato", "onion", "mushroom", "lettuce" ]</span>
<span class="s"> minerals = [ "quartz", "iron", "copper", "diamond" ]</span>
<span class="s"> [animals]</span>
<span class="s"> cats = [ "tiger", "lion", "puma" ]</span>
<span class="s"> birds = [ "macaw", "pigeon", "canary" ]</span>
<span class="s"> fish = [ "salmon", "trout", "carp" ]</span>
<span class="s"> </span><span class="dl">)</span><span class="s">"</span><span class="sa">sv</span><span class="p">;</span>
<span class="ns">toml::</span><span class="ut">table</span> <span class="n">tbl</span> <span class="o">=</span> <span class="ns">toml::</span><span class="n">parse</span><span class="p">(</span><span class="n">source</span><span class="p">);</span>
<span class="c1">// different ways of directly querying data</span>
<span class="ns">std::</span><span class="ut">optional</span><span class="o">&lt;</span><span class="ns">std::</span><span class="ut">string_view</span><span class="o">&gt;</span> <span class="n">str1</span> <span class="o">=</span> <span class="n">tbl</span><span class="p">[</span><span class="s">"str"</span><span class="p">].</span><span class="ut">value</span><span class="o">&lt;</span><span class="ns">std::</span><span class="ut">string_view</span><span class="o">&gt;</span><span class="p">();</span>
<span class="ns">std::</span><span class="ut">optional</span><span class="o">&lt;</span><span class="ns">std::</span><span class="ut">string</span><span class="o">&gt;</span> <span class="n">str2</span> <span class="o">=</span> <span class="n">tbl</span><span class="p">[</span><span class="s">"str"</span><span class="p">].</span><span class="ut">value</span><span class="o">&lt;</span><span class="ns">std::</span><span class="ut">string</span><span class="o">&gt;</span><span class="p">();</span>
<span class="ns">std::</span><span class="ut">string_view</span> <span class="n">str3</span> <span class="o">=</span> <span class="n">tbl</span><span class="p">[</span><span class="s">"str"</span><span class="p">].</span><span class="n">value_or</span><span class="p">(</span><span class="s">""</span><span class="sa">sv</span><span class="p">);</span>
<span class="ns">std::</span><span class="ut">string</span><span class="o">&amp;</span> <span class="n">str4</span> <span class="o">=</span> <span class="n">tbl</span><span class="p">[</span><span class="s">"str"</span><span class="p">].</span><span class="n">ref</span><span class="o">&lt;</span><span class="ns">std::</span><span class="ut">string</span><span class="o">&gt;</span><span class="p">();</span> <span class="c1">// ~~dangerous~~</span>
<span class="ns">std::</span><span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="o">*</span><span class="n">str1</span> <span class="o">&lt;&lt;</span> <span class="s">"</span><span class="se">\n</span><span class="s">"</span><span class="p">;</span>
<span class="ns">std::</span><span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="o">*</span><span class="n">str2</span> <span class="o">&lt;&lt;</span> <span class="s">"</span><span class="se">\n</span><span class="s">"</span><span class="p">;</span>
<span class="ns">std::</span><span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="n">str3</span> <span class="o">&lt;&lt;</span> <span class="s">"</span><span class="se">\n</span><span class="s">"</span><span class="p">;</span>
<span class="ns">std::</span><span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="n">str4</span> <span class="o">&lt;&lt;</span> <span class="s">"</span><span class="se">\n</span><span class="s">"</span><span class="p">;</span>
<span class="c1">// get a toml::node_view of the element 'numbers' using operator[]</span>
<span class="k">auto</span> <span class="n">numbers</span> <span class="o">=</span> <span class="n">tbl</span><span class="p">[</span><span class="s">"numbers"</span><span class="p">];</span>
<span class="ns">std::</span><span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="s">"table has 'numbers': "</span> <span class="o">&lt;&lt;</span> <span class="o">!!</span><span class="n">numbers</span> <span class="o">&lt;&lt;</span> <span class="s">"</span><span class="se">\n</span><span class="s">"</span><span class="p">;</span>
<span class="ns">std::</span><span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="s">"numbers is an: "</span> <span class="o">&lt;&lt;</span> <span class="n">numbers</span><span class="p">.</span><span class="n">type</span><span class="p">()</span> <span class="o">&lt;&lt;</span> <span class="s">"</span><span class="se">\n</span><span class="s">"</span><span class="p">;</span>
<span class="ns">std::</span><span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="s">"numbers: "</span> <span class="o">&lt;&lt;</span> <span class="n">numbers</span> <span class="o">&lt;&lt;</span> <span class="s">"</span><span class="se">\n</span><span class="s">"</span><span class="p">;</span>
<span class="c1">// get the underlying array object to do some more advanced stuff</span>
<span class="k">if</span> <span class="p">(</span><span class="ns">toml::</span><span class="ut">array</span><span class="o">*</span> <span class="n">arr</span> <span class="o">=</span> <span class="n">numbers</span><span class="p">.</span><span class="n">as_array</span><span class="p">())</span>
<span class="p">{</span>
<span class="k">for</span> <span class="p">(</span><span class="ns">toml::</span><span class="ut">node</span><span class="o">&amp;</span> <span class="nl">elem</span> <span class="p">:</span> <span class="o">*</span><span class="n">arr</span><span class="p">)</span>
<span class="p">{</span>
<span class="c1">// visitation helps deal with the polymorphic nature of TOML data</span>
<span class="n">elem</span><span class="p">.</span><span class="n">visit</span><span class="p">([](</span><span class="k">auto</span><span class="o">&amp;&amp;</span> <span class="n">el</span><span class="p">)</span> <span class="k">noexcept</span>
<span class="p">{</span>
<span class="k">if</span> <span class="k">constexpr</span> <span class="p">(</span><span class="ns">toml::</span><span class="n">is_number</span><span class="o">&lt;</span><span class="k">decltype</span><span class="p">(</span><span class="n">el</span><span class="p">)</span><span class="o">&gt;</span><span class="p">)</span>
<span class="p">(</span><span class="o">*</span><span class="n">el</span><span class="p">)</span><span class="o">++</span><span class="p">;</span>
<span class="k">else</span> <span class="k">if</span> <span class="k">constexpr</span> <span class="p">(</span><span class="ns">toml::</span><span class="n">is_string</span><span class="o">&lt;</span><span class="k">decltype</span><span class="p">(</span><span class="n">el</span><span class="p">)</span><span class="o">&gt;</span><span class="p">)</span>
<span class="n">el</span> <span class="o">=</span> <span class="s">"five"</span><span class="sa">sv</span><span class="p">;</span>
<span class="p">});</span>
<span class="p">}</span>
<span class="c1">// arrays are very similar to <a class="m-doc muu-injected muu-external" href="https://en.cppreference.com/w/cpp/container/vector" target="_blank">std::vector</a></span>
<span class="n">arr</span><span class="o">-&gt;</span><span class="n">push_back</span><span class="p">(</span><span class="mi">7</span><span class="p">);</span>
<span class="n">arr</span><span class="o">-&gt;</span><span class="n">emplace_back</span><span class="o">&lt;</span><span class="ns">toml::</span><span class="ut">array</span><span class="o">&gt;</span><span class="p">(</span><span class="mi">8</span><span class="p">,</span> <span class="mi">9</span><span class="p">);</span>
<span class="ns">std::</span><span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="s">"numbers: "</span> <span class="o">&lt;&lt;</span> <span class="n">numbers</span> <span class="o">&lt;&lt;</span> <span class="s">"</span><span class="se">\n</span><span class="s">"</span><span class="p">;</span>
<span class="p">}</span>
<span class="c1">// node-views can be chained to quickly query deeper</span>
<span class="ns">std::</span><span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="s">"cats: "</span> <span class="o">&lt;&lt;</span> <span class="n">tbl</span><span class="p">[</span><span class="s">"animals"</span><span class="p">][</span><span class="s">"cats"</span><span class="p">]</span> <span class="o">&lt;&lt;</span> <span class="s">"</span><span class="se">\n</span><span class="s">"</span><span class="p">;</span>
<span class="ns">std::</span><span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="s">"fish[1]: "</span> <span class="o">&lt;&lt;</span> <span class="n">tbl</span><span class="p">[</span><span class="s">"animals"</span><span class="p">][</span><span class="s">"fish"</span><span class="p">][</span><span class="mi">1</span><span class="p">]</span> <span class="o">&lt;&lt;</span> <span class="s">"</span><span class="se">\n</span><span class="s">"</span><span class="p">;</span>
<span class="c1">// ...even if the element doesn't exist</span>
<span class="ns">std::</span><span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="s">"dinosaurs: "</span> <span class="o">&lt;&lt;</span> <span class="n">tbl</span><span class="p">[</span><span class="s">"animals"</span><span class="p">][</span><span class="s">"dinosaurs"</span><span class="p">]</span> <span class="o">&lt;&lt;</span> <span class="s">"</span><span class="se">\n</span><span class="s">"</span><span class="p">;</span> <span class="c1">//no dinosaurs :(</span>
<span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
<span class="p">}</span></pre><pre class="m-console"><span class="go">hello world</span>
<span class="go">hello world</span>
<span class="go">hello world</span>
<span class="go">hello world</span>
<span class="go">table has 'numbers': 1</span>
<span class="go">numbers is an: array</span>
<span class="go">numbers: [ 1, 2, 3, 'four', 5.0 ]</span>
<span class="go">numbers: [ 2, 3, 4, 'five', 6.0, 7, [ 8, 9 ] ]</span>
<span class="go">cats: [ 'tiger', 'lion', 'puma' ]</span>
<span class="go">fish[1]: 'trout'</span>
<span class="go">dinosaurs: </span></pre><aside class="m-note m-default"><h4>See also</h4><ul><li><a class="m-doc" href="classtoml_1_1node.html">toml::<wbr/>node</a></li><li><a class="m-doc" href="classtoml_1_1node__view.html">toml::<wbr/>node_view</a></li><li><a class="m-doc" href="classtoml_1_1value.html">toml::<wbr/>value</a></li><li><a class="m-doc" href="classtoml_1_1array.html">toml::<wbr/>array</a></li><li><a class="m-doc" href="classtoml_1_1table.html">toml::<wbr/>table</a></li></ul></aside></section><section id="mainpage-example-serialization"><h3><a href="#mainpage-example-serialization">Serializing as TOML and JSON</a></h3><p>All toml++ data types have overloaded <code>operator&lt;&lt;</code> for ostreams, so 'serializing' a set of TOML data to actual TOML is done just by printing it to an ostream. Converting it to JSON is done in the same way, but via a <a class="m-doc" href="classtoml_1_1json__formatter.html">toml::<wbr/>json_formatter</a>.</p><pre class="m-code"><p class="m-note m-success godbolt"><a class="muu-external godbolt" href="https://godbolt.org/z/MMNoW4" target="_blank">Try this code on Compiler Explorer</a></p><span class="cp">#include</span> <span class="cpf">&lt;iostream&gt;</span><span class="cp"></span>
<span class="cp">#include</span> <span class="cpf">&lt;toml++/toml.h&gt;</span><span class="cp"></span>
<span class="ut">int</span> <span class="nf">main</span><span class="p">()</span>
<span class="p">{</span>
<span class="k">auto</span> <span class="n">tbl</span> <span class="o">=</span> <span class="ns">toml::</span><span class="ut">table</span><span class="p">{{</span>
<span class="p">{</span> <span class="s">"lib"</span><span class="p">,</span> <span class="s">"toml++"</span> <span class="p">},</span>
<span class="p">{</span> <span class="s">"cpp"</span><span class="p">,</span> <span class="ns">toml::</span><span class="ut">array</span><span class="p">{</span> <span class="mi">17</span><span class="p">,</span> <span class="mi">20</span><span class="p">,</span> <span class="s">"and beyond"</span> <span class="p">}</span> <span class="p">},</span>
<span class="p">{</span> <span class="s">"toml"</span><span class="p">,</span> <span class="ns">toml::</span><span class="ut">array</span><span class="p">{</span> <span class="s">"1.0.0-rc.1"</span><span class="p">,</span> <span class="s">"and beyond"</span> <span class="p">}</span> <span class="p">},</span>
<span class="p">{</span> <span class="s">"repo"</span><span class="p">,</span> <span class="s">"https://github.com/marzer/tomlplusplus/"</span> <span class="p">},</span>
<span class="p">{</span> <span class="s">"author"</span><span class="p">,</span> <span class="ns">toml::</span><span class="ut">table</span><span class="p">{{</span>
<span class="p">{</span> <span class="s">"name"</span><span class="p">,</span> <span class="s">"Mark Gillard"</span> <span class="p">},</span>
<span class="p">{</span> <span class="s">"github"</span><span class="p">,</span> <span class="s">"https://github.com/marzer"</span> <span class="p">},</span>
<span class="p">{</span> <span class="s">"twitter"</span><span class="p">,</span> <span class="s">"https://twitter.com/marzer8789"</span> <span class="p">}</span>
<span class="p">}}</span>
<span class="p">},</span>
<span class="p">}};</span>
<span class="c1">// serializing as TOML</span>
<span class="ns">std::</span><span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="s">"###### TOML ######"</span> <span class="o">&lt;&lt;</span> <span class="s">"</span><span class="se">\n\n</span><span class="s">"</span><span class="p">;</span>
<span class="ns">std::</span><span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="n">tbl</span> <span class="o">&lt;&lt;</span> <span class="s">"</span><span class="se">\n\n</span><span class="s">"</span><span class="p">;</span>
<span class="c1">// serializing as JSON using toml::json_formatter:</span>
<span class="ns">std::</span><span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="s">"###### JSON ######"</span> <span class="o">&lt;&lt;</span> <span class="s">"</span><span class="se">\n\n</span><span class="s">"</span><span class="p">;</span>
<span class="ns">std::</span><span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="ns">toml::</span><span class="ut">json_formatter</span><span class="p">{</span> <span class="n">tbl</span> <span class="p">}</span> <span class="o">&lt;&lt;</span> <span class="s">"</span><span class="se">\n\n</span><span class="s">"</span><span class="p">;</span>
<span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
<span class="p">}</span></pre><pre class="m-console"><span class="gp">#</span><span class="c1">##### TOML ######</span>
<span class="go">cpp = [ 17, 20, 'and beyond' ]</span>
<span class="go">lib = 'toml++'</span>
<span class="go">repo = 'https://github.com/marzer/tomlplusplus/'</span>
<span class="go">toml = [ '1.0.0-rc.1', 'and beyond' ]</span>
<span class="go">[author]</span>
<span class="go">github = 'https://github.com/marzer'</span>
<span class="go">name = 'Mark Gillard'</span>
<span class="go">twitter = 'https://twitter.com/marzer8789'</span>
<span class="gp">#</span><span class="c1">##### JSON ######</span>
<span class="go">{</span>
<span class="go"> "author" : {</span>
<span class="go"> "github" : "https://github.com/marzer", </span>
<span class="go"> "name" : "Mark Gillard", </span>
<span class="go"> "twitter" : "https://twitter.com/marzer8789"</span>
<span class="go"> }, </span>
<span class="go"> "cpp" : [</span>
<span class="go"> 17,</span>
<span class="go"> 20,</span>
<span class="go"> "and beyond"</span>
<span class="go"> ], </span>
<span class="go"> "lib" : "toml++", </span>
<span class="go"> "repo" : "https://github.com/marzer/tomlplusplus/", </span>
<span class="go"> "toml" : [</span>
<span class="go"> "1.0.0-rc.1",</span>
<span class="go"> "and beyond"</span>
<span class="go"> ]</span>
<span class="go">}</span></pre><aside class="m-note m-default"><h4>See also</h4><ul><li><a class="m-doc" href="classtoml_1_1default__formatter.html">toml::<wbr/>default_formatter</a></li><li><a class="m-doc" href="classtoml_1_1json__formatter.html">toml::<wbr/>json_formatter</a></li></ul></aside></section><section id="mainpage-example-speed-up-compilation"><h3><a href="#mainpage-example-speed-up-compilation">Speeding up compilation</a></h3><p>Because toml++ is a header-only library of nontrivial size you might find that compilation times noticeably increase after you add it to your project, especially if you add the library's header somewhere that's visible from a large number of translation units. You can counter this by disabling 'all inline' mode and explicitly controlling where the library's implementation is compiled.</p><p><strong>Step 1: Set <a class="m-doc" href="group__configuration.html#ga8219bfd7e75587516385b6022b28abc2">TOML_<wbr/>HEADER_<wbr/>ONLY</a> to <code>0</code> before including toml++</strong></p><p>This must be the same everywhere, so either set it as a global <code>#define</code> in your build system, or do it manually before including toml++ in some global header that's used everywhere in your project:</p><pre class="m-code"><span class="c1">// global_header_that_includes_toml++.h</span>
<span class="cp">#define TOML_HEADER_ONLY 0</span>
<span class="cp">#include</span> <span class="cpf">&lt;toml.hpp&gt;</span><span class="cp"></span></pre><p><strong>Step 2: Define <a class="m-doc" href="group__configuration.html#ga27ee69835a1ddff9dbaf3015b4b08a11">TOML_<wbr/>IMPLEMENTATION</a> before including toml++ in one specific translation unit</strong></p><pre class="m-code"><span class="c1">// some_code_file.cpp</span>
<span class="cp">#define TOML_IMPLEMENTATION </span>
<span class="cp">#include</span> <span class="cpf">"global_header_that_includes_toml++.h"</span><span class="cp"></span></pre><p><strong>Bonus Step: Disable the parser if you don't need it</strong></p><p>If all you need to do is serialize some code-generated TOML and don't actually need the parser at all you can set <a class="m-doc" href="group__configuration.html#ga53c34f99a546e479d2440b60e3e6588d">TOML_<wbr/>PARSER</a> to <code>0</code> to disable the parser altogether. This can yield fairly significant compilation speedups since the parser accounts for a good chunk of the library's code.</p><aside class="m-note m-default"><h4>See also</h4><p><a class="m-doc" href="group__configuration.html">Library Configuration</a></p></aside></section></section><section id="mainpage-adding-lib"><h2><a href="#mainpage-adding-lib">Adding toml++ to your project</a></h2><p class="m-note m-default">The library comes in two flavours, 🍦 Single-header and 🍨 Regular. The API is the same for both.</p><section id="mainpage-adding-lib-old-school"><h3><a href="#mainpage-adding-lib-old-school">"The old fashioned way"</a></h3><p>Clone <a class="muu-external" href="https://github.com/marzer/tomlplusplus" target="_blank">the repository</a> from GitHub, and then:</p><h4>🍦 Single-header flavour</h4><ol><li>Drop <code>toml.hpp</code> wherever you like in your source tree</li><li>There is no step two</li></ol><h4>🍨 Regular flavour</h4><ol><li>Add <code>tomlplusplus/include</code> to your include paths</li><li><code>#include &lt;toml++/toml.h&gt;</code><br/></li></ol></section><section id="mainpage-adding-lib-meson"><h3><a href="#mainpage-adding-lib-meson">Meson</a></h3><p>The library supports being added as a subproject in the meson build system.</p></section><section id="mainpage-adding-lib-conan"><h3><a href="#mainpage-adding-lib-conan">Conan</a></h3><p>Add <code>tomlplusplus/2.0.0</code> to your conanfile. This adds the single-header version by default, but you can specify the regular version using <code>"multiple_headers": True</code>.</p></section><section id="mainpage-adding-lib-vcpkg"><h3><a href="#mainpage-adding-lib-vcpkg">Vcpkg</a></h3><p><em><a class="muu-external" href="https://github.com/microsoft/vcpkg/pull/10786" target="_blank">coming soon...</a></em></p></section><section id="mainpage-adding-lib-other"><h3><a href="#mainpage-adding-lib-other">Other environments and package managers</a></h3><p>toml++ is a fairly new project and I'm not up-to-speed with all of the available packaging and integration options in the modern C++ ecosystem. I'm also a cmake novice, for better or worse. If there's an integration option missing be assured that I fully support it being added, and welcome pull requests!</p></section><section id="mainpage-adding-lib-python"><h3><a href="#mainpage-adding-lib-python">Special mention: Python</a></h3><p>Yes, you read correctly, python. There exists a python wrapper built around toml++ called <a class="muu-external" href="https://github.com/bobfang1992/pytomlpp" target="_blank">pytomlpp</a>:</p><pre class="m-code">pip install pytomlpp</pre><p>Note that I'm not the developer or maintainer of that project so if you wish to report a bug relating to the python implementation, please do so at their repository, not on the main toml++ one.</p></section></section><section id="mainpage-configuration"><h2><a href="#mainpage-configuration">Library configuration options</a></h2><p>The library exposes a number of configuration options in the form of compiler <code>#defines</code>. Things like changing the <code>optional&lt;T&gt;</code> type, disabling header-only mode, et cetera. The full list of configurables can be found on the <a class="m-doc" href="group__configuration.html">Library Configuration</a> page.</p><aside class="m-note m-default"><h4>See also</h4><p><a class="m-doc" href="group__configuration.html">Library Configuration</a></p></aside></section><section id="mainpage-contributing"><h2><a href="#mainpage-contributing">Contributing</a></h2><p>Contributions are very welcome! Either by <a class="muu-external" href="https://github.com/marzer/tomlplusplus/issues" target="_blank">reporting issues</a> or submitting pull requests. If you wish to submit a pull request, please see <a class="muu-external" href="https://github.com/marzer/tomlplusplus/blob/master/CONTRIBUTING.md" target="_blank">CONTRIBUTING</a> for all the details you need to get going.</p></section><section id="mainpage-license"><h2><a href="#mainpage-license">License</a></h2><p>toml++ is licensed under the terms of the MIT license - see <a class="muu-external" href="https://github.com/marzer/tomlplusplus/blob/master/LICENSE" target="_blank">LICENSE</a>.</p><p class="m-note m-default">If you're using the single-header version of the library you don't need to explicitly distribute the license file; it is embedded in the preamble at the top of the header.</p></section><section id="mainpage-contact"><h2><a href="#mainpage-contact">Contacting the author</a></h2><p>For bug reports and feature requests please use the <a class="muu-external" href="https://github.com/marzer/tomlplusplus/issues" target="_blank">Github Issues</a> system. For anything else you're welcome to reach out via other means. In order of likely response speed:</p><ul><li>Twitter: <a class="muu-external" href="https://twitter.com/marzer8789" target="_blank">marzer8789</a></li><li>Email: <a class="muu-external" href="mailto:mark.gillard@outlook.com.au" target="_blank">mark.gillard@outlook.com.au</a></li><li>Facebook: <a class="muu-external" href="https://www.facebook.com/marzer" target="_blank">marzer</a></li><li>LinkedIn: <a class="muu-external" href="https://www.linkedin.com/in/marzer/" target="_blank">marzer</a><br/></li></ul></section>
</div>
</div>
</div>
</article></main>
<div class="m-doc-search" id="search">
<a href="#!" onclick="return hideSearch()"></a>
<div class="m-container">
<div class="m-row">
<div class="m-col-m-8 m-push-m-2">
<div class="m-doc-search-header m-text m-small">
<div><span class="m-label m-default">Tab</span> / <span class="m-label m-default">T</span> to search, <span class="m-label m-default">Esc</span> to close</div>
<div id="search-symbolcount"></div>
</div>
<div class="m-doc-search-content">
<form>
<input autocomplete="off" autofocus="autofocus" disabled="disabled" id="search-input" name="q" placeholder="Loading …" spellcheck="false" type="search"/>
</form>
<noscript class="m-text m-danger m-text-center">Unlike everything else in the docs, the search functionality <em>requires</em> JavaScript.</noscript>
<div class="m-text m-dim m-text-center" id="search-help">
<p class="m-noindent">Search for symbols, directories, files, pages or
modules. You can omit any prefix from the symbol or file path; adding a
<code>:</code> or <code>/</code> suffix lists all members of given symbol or
directory.</p>
<p class="m-noindent">Use <span class="m-label m-dim"></span>
/ <span class="m-label m-dim"></span> to navigate through the list,
<span class="m-label m-dim">Enter</span> to go.
<span class="m-label m-dim">Tab</span> autocompletes common prefix, you can
copy a link to the result using <span class="m-label m-dim"></span>
<span class="m-label m-dim">L</span> while <span class="m-label m-dim"></span>
<span class="m-label m-dim">M</span> produces a Markdown link.</p>
</div>
<div class="m-text m-warning m-text-center" id="search-notfound">Sorry, nothing was found.</div>
<ul id="search-results"></ul>
</div>
</div>
</div>
</div>
</div>
<script src="search-v1.js"></script>
<script async="async" src="searchdata-v1.js"></script>
<footer><nav>
<div class="m-container">
<div class="m-row">
<div class="m-col-l-10 m-push-l-1">
<a class="muu-external" href="https://github.com/marzer/tomlplusplus/" target="_blank">Github</a>
<a class="muu-external" href="https://github.com/marzer/tomlplusplus/issues" target="_blank">Report
an
issue</a>
<br/><br/>Documentation
generated
using
<a class="muu-external" href="https://mcss.mosra.cz/" target="_blank">m.css</a>
</div>
</div>
</div>
</nav></footer>
</body></html>