Merge pull request #291 from franzpoeschel/namespace-versioning

Use an inline namespace to distinguish emitted symbols by version numbers e4051f77d7
This commit is contained in:
ToruNiina
2025-05-17 07:21:19 +00:00
commit e671b8e3bd
193 changed files with 19632 additions and 0 deletions

View File

@@ -0,0 +1,170 @@
<!doctype html><html lang=ja dir=ltr><head><meta charset=UTF-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=description content="
spec.hpp
#
spec.hppでは、TOMLのバージョンを指定するためのクラスが定義されます。
toml::semantic_version
#
semantic_versionは、バージョン情報を格納するクラスです。
namespace toml
{
struct semantic_version
{
constexpr semantic_version(std::uint32_t mjr, std::uint32_t mnr, std::uint32_t p) noexcept;
std::uint32_t major;
std::uint32_t minor;
std::uint32_t patch;
};
constexpr semantic_version
make_semver(std::uint32_t major, std::uint32_t minor, std::uint32_t patch) noexcept;
constexpr bool operator==(const semantic_version&, const semantic_version&) noexcept;
constexpr bool operator!=(const semantic_version&, const semantic_version&) noexcept;
constexpr bool operator< (const semantic_version&, const semantic_version&) noexcept;
constexpr bool operator<=(const semantic_version&, const semantic_version&) noexcept;
constexpr bool operator> (const semantic_version&, const semantic_version&) noexcept;
constexpr bool operator>=(const semantic_version&, const semantic_version&) noexcept;
std::ostream& operator<<(std::ostream& os, const semantic_version& ver);
} //toml
メンバ関数
#
コンストラクタ
#
constexpr semantic_version(std::uint32_t mjr, std::uint32_t mnr, std::uint32_t p) noexcept;
major, minor, patchバージョンを指定して構築します。"><meta name=theme-color media="(prefers-color-scheme: light)" content="#ffffff"><meta name=theme-color media="(prefers-color-scheme: dark)" content="#343a40"><meta name=color-scheme content="light dark"><meta property="og:url" content="https://toruniina.github.io/toml11/ja/docs/reference/spec/"><meta property="og:site_name" content="toml11"><meta property="og:title" content="spec.hpp"><meta property="og:description" content="spec.hpp # spec.hppでは、TOMLのバージョンを指定するためのクラスが定義されます。
toml::semantic_version # semantic_versionは、バージョン情報を格納するクラスです。
namespace toml { struct semantic_version { constexpr semantic_version(std::uint32_t mjr, std::uint32_t mnr, std::uint32_t p) noexcept; std::uint32_t major; std::uint32_t minor; std::uint32_t patch; }; constexpr semantic_version make_semver(std::uint32_t major, std::uint32_t minor, std::uint32_t patch) noexcept; constexpr bool operator==(const semantic_version&, const semantic_version&) noexcept; constexpr bool operator!=(const semantic_version&, const semantic_version&) noexcept; constexpr bool operator< (const semantic_version&, const semantic_version&) noexcept; constexpr bool operator<=(const semantic_version&, const semantic_version&) noexcept; constexpr bool operator> (const semantic_version&, const semantic_version&) noexcept; constexpr bool operator>=(const semantic_version&, const semantic_version&) noexcept; std::ostream& operator<<(std::ostream& os, const semantic_version& ver); } //toml メンバ関数 # コンストラクタ # constexpr semantic_version(std::uint32_t mjr, std::uint32_t mnr, std::uint32_t p) noexcept; major, minor, patchバージョンを指定して構築します。"><meta property="og:locale" content="ja"><meta property="og:type" content="article"><meta property="article:section" content="docs"><title>spec.hpp | toml11</title>
<link rel=manifest href=/toml11/manifest.json><link rel=icon href=/toml11/favicon.png><link rel=canonical href=https://toruniina.github.io/toml11/ja/docs/reference/spec/><link rel=alternate hreflang=en href=https://toruniina.github.io/toml11/docs/reference/spec/ title=spec.hpp><link rel=stylesheet href=/toml11/book.min.ddac3efe7ea4c1007ff53e5a8fd67f12517e5d2e99984d8c67a18668f7ecaa03.css integrity="sha256-3aw+/n6kwQB/9T5aj9Z/ElF+XS6ZmE2MZ6GGaPfsqgM=" crossorigin=anonymous><script defer src=/toml11/fuse.min.js></script><script defer src=/toml11/ja.search.min.13aefbf6a803b591c02d5bc9a01dfe65fe37c31e2915c91573708d38e805d86c.js integrity="sha256-E6779qgDtZHALVvJoB3+Zf43wx4pFckVc3CNOOgF2Gw=" crossorigin=anonymous></script></head><body dir=ltr><input type=checkbox class="hidden toggle" id=menu-control>
<input type=checkbox class="hidden toggle" id=toc-control><main class="container flex"><aside class=book-menu><div class=book-menu-content><nav><h2 class=book-brand><a class="flex align-center" href=/toml11/ja/><span>toml11</span></a></h2><div class="book-search hidden"><input type=text id=book-search-input placeholder=検索 aria-label=検索 maxlength=64 data-hotkeys=s/><div class="book-search-spinner hidden"></div><ul id=book-search-results></ul></div><script>document.querySelector(".book-search").classList.remove("hidden")</script><ul class=book-languages><li><input type=checkbox id=languages class=toggle>
<label for=languages class="flex justify-between"><a role=button class="flex align-center"><img src=/toml11/svg/translate.svg class=book-icon alt=Languages>
日本語</a></label><ul><li><a href=https://toruniina.github.io/toml11/docs/reference/spec/>English</a></li></ul></li></ul><ul><li><a href=/toml11/ja/docs/installation/>installation</a><ul></ul></li><li><input type=checkbox id=section-b4cfb5b55e913a8d853eacf5e8fba05f class=toggle>
<label for=section-b4cfb5b55e913a8d853eacf5e8fba05f class="flex justify-between"><a href=/toml11/ja/docs/features/>features</a></label><ul><li><a href=/toml11/ja/docs/features/parsing_files/>parsing files</a></li><li><a href=/toml11/ja/docs/features/value/>getting values</a></li><li><a href=/toml11/ja/docs/features/error_message/>error message</a></li><li><a href=/toml11/ja/docs/features/serialize/>serializing values</a></li><li><a href=/toml11/ja/docs/features/configure_types/>configuring types</a></li><li><a href=/toml11/ja/docs/features/literal/>toml literal</a></li><li><a href=/toml11/ja/docs/features/toml_spec/>toml spec</a></li><li><a href=/toml11/ja/docs/features/extension/>extension</a></li></ul></li><li><input type=checkbox id=section-01b096afc5186aea96713b408b47c967 class=toggle checked>
<label for=section-01b096afc5186aea96713b408b47c967 class="flex justify-between"><a href=/toml11/ja/docs/reference/>reference</a></label><ul><li><a href=/toml11/ja/docs/reference/color/>color.hpp</a></li><li><a href=/toml11/ja/docs/reference/comments/>comments.hpp</a></li><li><a href=/toml11/ja/docs/reference/conversion/>conversion.hpp</a></li><li><a href=/toml11/ja/docs/reference/datetime/>datetime.hpp</a></li><li><a href=/toml11/ja/docs/reference/error_info/>error_info.hpp</a></li><li><a href=/toml11/ja/docs/reference/exception/>exception.hpp</a></li><li><a href=/toml11/ja/docs/reference/find/>find.hpp</a></li><li><a href=/toml11/ja/docs/reference/format/>format.hpp</a></li><li><a href=/toml11/ja/docs/reference/from/>from.hpp</a></li><li><a href=/toml11/ja/docs/reference/get/>get.hpp</a></li><li><a href=/toml11/ja/docs/reference/into/>into.hpp</a></li><li><a href=/toml11/ja/docs/reference/literal/>literal.hpp</a></li><li><a href=/toml11/ja/docs/reference/ordered_map/>ordered_map.hpp</a></li><li><a href=/toml11/ja/docs/reference/parser/>parser.hpp</a></li><li><a href=/toml11/ja/docs/reference/result/>result.hpp</a></li><li><a href=/toml11/ja/docs/reference/serializer/>serializer.hpp</a></li><li><a href=/toml11/ja/docs/reference/source_location/>source_location.hpp</a></li><li><a href=/toml11/ja/docs/reference/spec/ class=active>spec.hpp</a></li><li><a href=/toml11/ja/docs/reference/toml_fwd/>toml_fwd.hpp</a></li><li><a href=/toml11/ja/docs/reference/toml/>toml.hpp</a></li><li><a href=/toml11/ja/docs/reference/types/>types.hpp</a></li><li><a href=/toml11/ja/docs/reference/value_t/>value_t.hpp</a></li><li><a href=/toml11/ja/docs/reference/value/>value.hpp</a></li><li><a href=/toml11/ja/docs/reference/version/>version.hpp</a></li><li><a href=/toml11/ja/docs/reference/visit/>visit.hpp</a></li></ul></li><li><a href=/toml11/ja/docs/changelog/>changelog</a><ul></ul></li></ul><ul><li><a href=https://github.com/ToruNiina/toml11 target=_blank rel=noopener>GitHub</a></li></ul></nav><script>(function(){var e=document.querySelector("aside .book-menu-content");addEventListener("beforeunload",function(){localStorage.setItem("menu.scrollTop",e.scrollTop)}),e.scrollTop=localStorage.getItem("menu.scrollTop")})()</script></div></aside><div class=book-page><header class=book-header><div class="flex align-center justify-between"><label for=menu-control><img src=/toml11/svg/menu.svg class=book-icon alt=Menu>
</label><strong>spec.hpp</strong>
<label for=toc-control><img src=/toml11/svg/toc.svg class=book-icon alt="Table of Contents"></label></div><aside class="hidden clearfix"><nav id=TableOfContents><ul><li><a href=#spechpp>spec.hpp</a></li><li><a href=#tomlsemantic_version><code>toml::semantic_version</code></a><ul><li><a href=#メンバ関数>メンバ関数</a><ul><li><a href=#コンストラクタ>コンストラクタ</a></li></ul></li><li><a href=#非メンバ関数>非メンバ関数</a><ul><li><a href=#比較演算子>比較演算子</a></li><li><a href=#ストリーム演算子>ストリーム演算子</a></li><li><a href=#to_string><code>to_string</code></a></li></ul></li></ul></li><li><a href=#tomlspec><code>toml::spec</code></a><ul><li><a href=#メンバ関数-1>メンバ関数</a><ul><li><a href=#コンストラクタ-1>コンストラクタ</a></li><li><a href=#default_version><code>default_version()</code></a></li><li><a href=#vmajor-minor-patch><code>v(major, minor, patch)</code></a></li></ul></li><li><a href=#メンバ変数>メンバ変数</a><ul><li><a href=#例></a></li><li><a href=#v1_1_0_allow_control_characters_in_comments><code>v1_1_0_allow_control_characters_in_comments</code></a></li><li><a href=#v1_1_0_allow_newlines_in_inline_tables><code>v1_1_0_allow_newlines_in_inline_tables</code></a></li><li><a href=#v1_1_0_allow_trailing_comma_in_inline_tables><code>v1_1_0_allow_trailing_comma_in_inline_tables</code></a></li><li><a href=#v1_1_0_add_escape_sequence_e><code>v1_1_0_add_escape_sequence_e</code></a></li><li><a href=#v1_1_0_add_escape_sequence_x><code>v1_1_0_add_escape_sequence_x</code></a></li><li><a href=#v1_1_0_make_seconds_optional><code>v1_1_0_make_seconds_optional</code></a></li><li><a href=#ext_hex_float><code>ext_hex_float</code></a></li><li><a href=#ext_num_suffix><code>ext_num_suffix</code></a></li><li><a href=#ext_null_value><code>ext_null_value</code></a></li></ul></li></ul></li></ul></nav></aside></header><article class="markdown book-article"><h1 id=spechpp>spec.hpp
<a class=anchor href=#spechpp>#</a></h1><p><code>spec.hpp</code>では、TOMLのバージョンを指定するためのクラスが定義されます。</p><h1 id=tomlsemantic_version><code>toml::semantic_version</code>
<a class=anchor href=#tomlsemantic_version>#</a></h1><p><code>semantic_version</code>は、バージョン情報を格納するクラスです。</p><div class=highlight><pre tabindex=0 style=color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-cpp data-lang=cpp><span style=display:flex><span><span style=color:#66d9ef>namespace</span> toml
</span></span><span style=display:flex><span>{
</span></span><span style=display:flex><span><span style=color:#66d9ef>struct</span> <span style=color:#a6e22e>semantic_version</span>
</span></span><span style=display:flex><span>{
</span></span><span style=display:flex><span> <span style=color:#66d9ef>constexpr</span> <span style=color:#a6e22e>semantic_version</span>(std<span style=color:#f92672>::</span><span style=color:#66d9ef>uint32_t</span> mjr, std<span style=color:#f92672>::</span><span style=color:#66d9ef>uint32_t</span> mnr, std<span style=color:#f92672>::</span><span style=color:#66d9ef>uint32_t</span> p) <span style=color:#66d9ef>noexcept</span>;
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> std<span style=color:#f92672>::</span><span style=color:#66d9ef>uint32_t</span> major;
</span></span><span style=display:flex><span> std<span style=color:#f92672>::</span><span style=color:#66d9ef>uint32_t</span> minor;
</span></span><span style=display:flex><span> std<span style=color:#f92672>::</span><span style=color:#66d9ef>uint32_t</span> patch;
</span></span><span style=display:flex><span>};
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#66d9ef>constexpr</span> semantic_version
</span></span><span style=display:flex><span><span style=color:#a6e22e>make_semver</span>(std<span style=color:#f92672>::</span><span style=color:#66d9ef>uint32_t</span> major, std<span style=color:#f92672>::</span><span style=color:#66d9ef>uint32_t</span> minor, std<span style=color:#f92672>::</span><span style=color:#66d9ef>uint32_t</span> patch) <span style=color:#66d9ef>noexcept</span>;
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#66d9ef>constexpr</span> <span style=color:#66d9ef>bool</span> <span style=color:#66d9ef>operator</span><span style=color:#f92672>==</span>(<span style=color:#66d9ef>const</span> semantic_version<span style=color:#f92672>&amp;</span>, <span style=color:#66d9ef>const</span> semantic_version<span style=color:#f92672>&amp;</span>) <span style=color:#66d9ef>noexcept</span>;
</span></span><span style=display:flex><span><span style=color:#66d9ef>constexpr</span> <span style=color:#66d9ef>bool</span> <span style=color:#66d9ef>operator</span><span style=color:#f92672>!=</span>(<span style=color:#66d9ef>const</span> semantic_version<span style=color:#f92672>&amp;</span>, <span style=color:#66d9ef>const</span> semantic_version<span style=color:#f92672>&amp;</span>) <span style=color:#66d9ef>noexcept</span>;
</span></span><span style=display:flex><span><span style=color:#66d9ef>constexpr</span> <span style=color:#66d9ef>bool</span> <span style=color:#66d9ef>operator</span><span style=color:#f92672>&lt;</span> (<span style=color:#66d9ef>const</span> semantic_version<span style=color:#f92672>&amp;</span>, <span style=color:#66d9ef>const</span> semantic_version<span style=color:#f92672>&amp;</span>) <span style=color:#66d9ef>noexcept</span>;
</span></span><span style=display:flex><span><span style=color:#66d9ef>constexpr</span> <span style=color:#66d9ef>bool</span> <span style=color:#66d9ef>operator</span><span style=color:#f92672>&lt;=</span>(<span style=color:#66d9ef>const</span> semantic_version<span style=color:#f92672>&amp;</span>, <span style=color:#66d9ef>const</span> semantic_version<span style=color:#f92672>&amp;</span>) <span style=color:#66d9ef>noexcept</span>;
</span></span><span style=display:flex><span><span style=color:#66d9ef>constexpr</span> <span style=color:#66d9ef>bool</span> <span style=color:#66d9ef>operator</span><span style=color:#f92672>&gt;</span> (<span style=color:#66d9ef>const</span> semantic_version<span style=color:#f92672>&amp;</span>, <span style=color:#66d9ef>const</span> semantic_version<span style=color:#f92672>&amp;</span>) <span style=color:#66d9ef>noexcept</span>;
</span></span><span style=display:flex><span><span style=color:#66d9ef>constexpr</span> <span style=color:#66d9ef>bool</span> <span style=color:#66d9ef>operator</span><span style=color:#f92672>&gt;=</span>(<span style=color:#66d9ef>const</span> semantic_version<span style=color:#f92672>&amp;</span>, <span style=color:#66d9ef>const</span> semantic_version<span style=color:#f92672>&amp;</span>) <span style=color:#66d9ef>noexcept</span>;
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>std<span style=color:#f92672>::</span>ostream<span style=color:#f92672>&amp;</span> <span style=color:#66d9ef>operator</span><span style=color:#f92672>&lt;&lt;</span>(std<span style=color:#f92672>::</span>ostream<span style=color:#f92672>&amp;</span> os, <span style=color:#66d9ef>const</span> semantic_version<span style=color:#f92672>&amp;</span> ver);
</span></span><span style=display:flex><span>} <span style=color:#75715e>//toml
</span></span></span></code></pre></div><h2 id=メンバ関数>メンバ関数
<a class=anchor href=#%e3%83%a1%e3%83%b3%e3%83%90%e9%96%a2%e6%95%b0>#</a></h2><h3 id=コンストラクタ>コンストラクタ
<a class=anchor href=#%e3%82%b3%e3%83%b3%e3%82%b9%e3%83%88%e3%83%a9%e3%82%af%e3%82%bf>#</a></h3><div class=highlight><pre tabindex=0 style=color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-cpp data-lang=cpp><span style=display:flex><span><span style=color:#66d9ef>constexpr</span> <span style=color:#a6e22e>semantic_version</span>(std<span style=color:#f92672>::</span><span style=color:#66d9ef>uint32_t</span> mjr, std<span style=color:#f92672>::</span><span style=color:#66d9ef>uint32_t</span> mnr, std<span style=color:#f92672>::</span><span style=color:#66d9ef>uint32_t</span> p) <span style=color:#66d9ef>noexcept</span>;
</span></span></code></pre></div><p><code>major</code>, <code>minor</code>, <code>patch</code>バージョンを指定して構築します。</p><h2 id=非メンバ関数>非メンバ関数
<a class=anchor href=#%e9%9d%9e%e3%83%a1%e3%83%b3%e3%83%90%e9%96%a2%e6%95%b0>#</a></h2><h3 id=比較演算子>比較演算子
<a class=anchor href=#%e6%af%94%e8%bc%83%e6%bc%94%e7%ae%97%e5%ad%90>#</a></h3><div class=highlight><pre tabindex=0 style=color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-cpp data-lang=cpp><span style=display:flex><span><span style=color:#66d9ef>constexpr</span> <span style=color:#66d9ef>bool</span> <span style=color:#66d9ef>operator</span><span style=color:#f92672>==</span>(<span style=color:#66d9ef>const</span> semantic_version<span style=color:#f92672>&amp;</span>, <span style=color:#66d9ef>const</span> semantic_version<span style=color:#f92672>&amp;</span>) <span style=color:#66d9ef>noexcept</span>;
</span></span><span style=display:flex><span><span style=color:#66d9ef>constexpr</span> <span style=color:#66d9ef>bool</span> <span style=color:#66d9ef>operator</span><span style=color:#f92672>!=</span>(<span style=color:#66d9ef>const</span> semantic_version<span style=color:#f92672>&amp;</span>, <span style=color:#66d9ef>const</span> semantic_version<span style=color:#f92672>&amp;</span>) <span style=color:#66d9ef>noexcept</span>;
</span></span><span style=display:flex><span><span style=color:#66d9ef>constexpr</span> <span style=color:#66d9ef>bool</span> <span style=color:#66d9ef>operator</span><span style=color:#f92672>&lt;</span> (<span style=color:#66d9ef>const</span> semantic_version<span style=color:#f92672>&amp;</span>, <span style=color:#66d9ef>const</span> semantic_version<span style=color:#f92672>&amp;</span>) <span style=color:#66d9ef>noexcept</span>;
</span></span><span style=display:flex><span><span style=color:#66d9ef>constexpr</span> <span style=color:#66d9ef>bool</span> <span style=color:#66d9ef>operator</span><span style=color:#f92672>&lt;=</span>(<span style=color:#66d9ef>const</span> semantic_version<span style=color:#f92672>&amp;</span>, <span style=color:#66d9ef>const</span> semantic_version<span style=color:#f92672>&amp;</span>) <span style=color:#66d9ef>noexcept</span>;
</span></span><span style=display:flex><span><span style=color:#66d9ef>constexpr</span> <span style=color:#66d9ef>bool</span> <span style=color:#66d9ef>operator</span><span style=color:#f92672>&gt;</span> (<span style=color:#66d9ef>const</span> semantic_version<span style=color:#f92672>&amp;</span>, <span style=color:#66d9ef>const</span> semantic_version<span style=color:#f92672>&amp;</span>) <span style=color:#66d9ef>noexcept</span>;
</span></span><span style=display:flex><span><span style=color:#66d9ef>constexpr</span> <span style=color:#66d9ef>bool</span> <span style=color:#66d9ef>operator</span><span style=color:#f92672>&gt;=</span>(<span style=color:#66d9ef>const</span> semantic_version<span style=color:#f92672>&amp;</span>, <span style=color:#66d9ef>const</span> semantic_version<span style=color:#f92672>&amp;</span>) <span style=color:#66d9ef>noexcept</span>;
</span></span></code></pre></div><p>semantic versioningに従って比較します。</p><h3 id=ストリーム演算子>ストリーム演算子
<a class=anchor href=#%e3%82%b9%e3%83%88%e3%83%aa%e3%83%bc%e3%83%a0%e6%bc%94%e7%ae%97%e5%ad%90>#</a></h3><div class=highlight><pre tabindex=0 style=color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-cpp data-lang=cpp><span style=display:flex><span>std<span style=color:#f92672>::</span>ostream<span style=color:#f92672>&amp;</span> <span style=color:#66d9ef>operator</span><span style=color:#f92672>&lt;&lt;</span>(std<span style=color:#f92672>::</span>ostream<span style=color:#f92672>&amp;</span> os, <span style=color:#66d9ef>const</span> semantic_version<span style=color:#f92672>&amp;</span> ver);
</span></span></code></pre></div><p><code>{major}.{minor}.{patch}</code>の形式で出力します。</p><h3 id=to_string><code>to_string</code>
<a class=anchor href=#to_string>#</a></h3><div class=highlight><pre tabindex=0 style=color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-cpp data-lang=cpp><span style=display:flex><span>std<span style=color:#f92672>::</span>string to_string(<span style=color:#66d9ef>const</span> semantic_version<span style=color:#f92672>&amp;</span> ver);
</span></span></code></pre></div><p><code>{major}.{minor}.{patch}</code>の形式で文字列化します。</p><h1 id=tomlspec><code>toml::spec</code>
<a class=anchor href=#tomlspec>#</a></h1><p><code>spec</code>は、TOMLのバージョン情報を格納するクラスです。</p><div class=highlight><pre tabindex=0 style=color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-cpp data-lang=cpp><span style=display:flex><span><span style=color:#66d9ef>struct</span> <span style=color:#a6e22e>spec</span>
</span></span><span style=display:flex><span>{
</span></span><span style=display:flex><span> <span style=color:#66d9ef>constexpr</span> <span style=color:#66d9ef>static</span> spec <span style=color:#a6e22e>default_version</span>() <span style=color:#66d9ef>noexcept</span>;
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> <span style=color:#66d9ef>constexpr</span> <span style=color:#66d9ef>static</span> spec <span style=color:#a6e22e>v</span>(std<span style=color:#f92672>::</span><span style=color:#66d9ef>uint32_t</span> mjr, std<span style=color:#f92672>::</span><span style=color:#66d9ef>uint32_t</span> mnr, std<span style=color:#f92672>::</span><span style=color:#66d9ef>uint32_t</span> p) <span style=color:#66d9ef>noexcept</span>;
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> <span style=color:#66d9ef>constexpr</span> <span style=color:#66d9ef>explicit</span> <span style=color:#a6e22e>spec</span>(<span style=color:#66d9ef>const</span> semantic_version<span style=color:#f92672>&amp;</span> semver) <span style=color:#66d9ef>noexcept</span>;
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> semantic_version version; <span style=color:#75715e>// toml version
</span></span></span><span style=display:flex><span><span style=color:#75715e></span>
</span></span><span style=display:flex><span> <span style=color:#75715e>// diff from v1.0.0 -&gt; v1.1.0
</span></span></span><span style=display:flex><span><span style=color:#75715e></span> <span style=color:#66d9ef>bool</span> v1_1_0_allow_control_characters_in_comments;
</span></span><span style=display:flex><span> <span style=color:#66d9ef>bool</span> v1_1_0_allow_newlines_in_inline_tables;
</span></span><span style=display:flex><span> <span style=color:#66d9ef>bool</span> v1_1_0_allow_trailing_comma_in_inline_tables;
</span></span><span style=display:flex><span> <span style=color:#66d9ef>bool</span> v1_1_0_allow_non_english_in_bare_keys;
</span></span><span style=display:flex><span> <span style=color:#66d9ef>bool</span> v1_1_0_add_escape_sequence_e;
</span></span><span style=display:flex><span> <span style=color:#66d9ef>bool</span> v1_1_0_add_escape_sequence_x;
</span></span><span style=display:flex><span> <span style=color:#66d9ef>bool</span> v1_1_0_make_seconds_optional;
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> <span style=color:#75715e>// library extensions
</span></span></span><span style=display:flex><span><span style=color:#75715e></span> <span style=color:#66d9ef>bool</span> ext_hex_float; <span style=color:#75715e>// allow hex float
</span></span></span><span style=display:flex><span><span style=color:#75715e></span> <span style=color:#66d9ef>bool</span> ext_num_suffix; <span style=color:#75715e>// allow number suffix
</span></span></span><span style=display:flex><span><span style=color:#75715e></span> <span style=color:#66d9ef>bool</span> ext_null_value; <span style=color:#75715e>// allow null value
</span></span></span><span style=display:flex><span><span style=color:#75715e></span>};
</span></span></code></pre></div><h2 id=メンバ関数-1>メンバ関数
<a class=anchor href=#%e3%83%a1%e3%83%b3%e3%83%90%e9%96%a2%e6%95%b0-1>#</a></h2><h3 id=コンストラクタ-1>コンストラクタ
<a class=anchor href=#%e3%82%b3%e3%83%b3%e3%82%b9%e3%83%88%e3%83%a9%e3%82%af%e3%82%bf-1>#</a></h3><div class=highlight><pre tabindex=0 style=color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-cpp data-lang=cpp><span style=display:flex><span><span style=color:#66d9ef>constexpr</span> <span style=color:#66d9ef>explicit</span> <span style=color:#a6e22e>spec</span>(<span style=color:#66d9ef>const</span> semantic_version<span style=color:#f92672>&amp;</span> semver) <span style=color:#66d9ef>noexcept</span>;
</span></span></code></pre></div><p>指定されたTOMLバージョンで<code>spec</code>を構築します。</p><p>TOML v1.0.0と、TOML v1.1.0に対応しています。</p><h3 id=default_version><code>default_version()</code>
<a class=anchor href=#default_version>#</a></h3><div class=highlight><pre tabindex=0 style=color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-cpp data-lang=cpp><span style=display:flex><span><span style=color:#66d9ef>constexpr</span> <span style=color:#66d9ef>static</span> spec <span style=color:#a6e22e>default_version</span>() <span style=color:#66d9ef>noexcept</span>;
</span></span></code></pre></div><p>デフォルトのバージョンで<code>spec</code>を構築します。</p><p><code>toml::parse</code><code>toml::format</code>でのデフォルト値として使われます。</p><p>toml11 v4.4.0での値は、v1.0.0です。</p><h3 id=vmajor-minor-patch><code>v(major, minor, patch)</code>
<a class=anchor href=#vmajor-minor-patch>#</a></h3><div class=highlight><pre tabindex=0 style=color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-cpp data-lang=cpp><span style=display:flex><span><span style=color:#66d9ef>constexpr</span> <span style=color:#66d9ef>static</span> spec <span style=color:#a6e22e>v</span>(std<span style=color:#f92672>::</span><span style=color:#66d9ef>uint32_t</span> mjr, std<span style=color:#f92672>::</span><span style=color:#66d9ef>uint32_t</span> mnr, std<span style=color:#f92672>::</span><span style=color:#66d9ef>uint32_t</span> p) <span style=color:#66d9ef>noexcept</span>;
</span></span></code></pre></div><p>指定されたバージョンで<code>spec</code>を構築します。</p><h2 id=メンバ変数>メンバ変数
<a class=anchor href=#%e3%83%a1%e3%83%b3%e3%83%90%e5%a4%89%e6%95%b0>#</a></h2><p>各フラグは機能追加がされたバージョンを指定されたとき、自動的に<code>true</code>になります。</p><p>変更して渡すことで、<code>toml::parse</code><code>toml::format</code>の挙動を変更できます。</p><blockquote class="book-hint warning"><p>TOML v1.1.0の一部の機能にはかなり長い議論が続いており、まだ差し戻される可能性があります。</p><p>実際に差し戻された場合、toml11はマイナーバージョンアップでそれらの機能を削除、もしくは対応するそれ以降のバージョンに移動します。</p><p>そのような意味で、将来のバージョンに関する機能は全て不安定なものと考えてください。</p></blockquote><h3 id=>
<a class=anchor href=#%e4%be%8b>#</a></h3><div class=highlight><pre tabindex=0 style=color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-cpp data-lang=cpp><span style=display:flex><span><span style=color:#66d9ef>auto</span> spec <span style=color:#f92672>=</span> toml<span style=color:#f92672>::</span>spec<span style=color:#f92672>::</span>v(<span style=color:#ae81ff>1</span>, <span style=color:#ae81ff>0</span>, <span style=color:#ae81ff>0</span>);
</span></span><span style=display:flex><span><span style=color:#75715e>// v1.0.0の機能に追加して、inline table内の改行を許可する。
</span></span></span><span style=display:flex><span><span style=color:#75715e>// それ以外のv1.1.0の機能は有効化されない。
</span></span></span><span style=display:flex><span><span style=color:#75715e></span>spec.v1_1_0_allow_newlines_in_inline_tables <span style=color:#f92672>=</span> true;
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#66d9ef>auto</span> input <span style=color:#f92672>=</span> toml<span style=color:#f92672>::</span>parse(<span style=color:#e6db74>&#34;input_file.toml&#34;</span>, spec);
</span></span></code></pre></div><h3 id=v1_1_0_allow_control_characters_in_comments><code>v1_1_0_allow_control_characters_in_comments</code>
<a class=anchor href=#v1_1_0_allow_control_characters_in_comments>#</a></h3><div class=highlight><pre tabindex=0 style=color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-cpp data-lang=cpp><span style=display:flex><span><span style=color:#66d9ef>bool</span> v1_1_0_allow_control_characters_in_comments;
</span></span></code></pre></div><p>ほとんどの制御文字をコメントに含むことを許可します。</p><p>toml v1.1.0で追加。</p><h3 id=v1_1_0_allow_newlines_in_inline_tables><code>v1_1_0_allow_newlines_in_inline_tables</code>
<a class=anchor href=#v1_1_0_allow_newlines_in_inline_tables>#</a></h3><div class=highlight><pre tabindex=0 style=color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-cpp data-lang=cpp><span style=display:flex><span><span style=color:#66d9ef>bool</span> v1_1_0_allow_newlines_in_inline_tables;
</span></span></code></pre></div><p>inline table内で改行することを許可します。</p><p>toml v1.1.0で追加。</p><h3 id=v1_1_0_allow_trailing_comma_in_inline_tables><code>v1_1_0_allow_trailing_comma_in_inline_tables</code>
<a class=anchor href=#v1_1_0_allow_trailing_comma_in_inline_tables>#</a></h3><div class=highlight><pre tabindex=0 style=color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-cpp data-lang=cpp><span style=display:flex><span><span style=color:#66d9ef>bool</span> v1_1_0_allow_trailing_comma_in_inline_tables;
</span></span></code></pre></div><p>inline table内での末尾コンマを許可します。</p><p>toml v1.1.0で追加。</p><h3 id=v1_1_0_add_escape_sequence_e><code>v1_1_0_add_escape_sequence_e</code>
<a class=anchor href=#v1_1_0_add_escape_sequence_e>#</a></h3><div class=highlight><pre tabindex=0 style=color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-cpp data-lang=cpp><span style=display:flex><span><span style=color:#66d9ef>bool</span> v1_1_0_add_escape_sequence_e;
</span></span></code></pre></div><p><code>\e</code>でESC文字を指定できるようになります。</p><p>toml v1.1.0で追加。</p><h3 id=v1_1_0_add_escape_sequence_x><code>v1_1_0_add_escape_sequence_x</code>
<a class=anchor href=#v1_1_0_add_escape_sequence_x>#</a></h3><div class=highlight><pre tabindex=0 style=color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-cpp data-lang=cpp><span style=display:flex><span><span style=color:#66d9ef>bool</span> v1_1_0_add_escape_sequence_x;
</span></span></code></pre></div><p><code>\xHH</code>で1バイトの文字を指定できるようになります。</p><p>toml v1.1.0で追加。</p><h3 id=v1_1_0_make_seconds_optional><code>v1_1_0_make_seconds_optional</code>
<a class=anchor href=#v1_1_0_make_seconds_optional>#</a></h3><div class=highlight><pre tabindex=0 style=color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-cpp data-lang=cpp><span style=display:flex><span><span style=color:#66d9ef>bool</span> v1_1_0_make_seconds_optional;
</span></span></code></pre></div><p>時刻での秒数指定を省略可能にします。</p><p>指定されなかった秒数は<code>0</code>で初期化されます。</p><p>toml v1.1.0で追加。</p><h3 id=ext_hex_float><code>ext_hex_float</code>
<a class=anchor href=#ext_hex_float>#</a></h3><div class=highlight><pre tabindex=0 style=color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-cpp data-lang=cpp><span style=display:flex><span><span style=color:#66d9ef>bool</span> ext_hex_float;
</span></span></code></pre></div><p>toml11限定の言語拡張です。</p><p>どのバージョンを指定しても、<code>false</code>で初期化されます。
使用する際は個別に<code>true</code>にしてください。</p><p>浮動小数点数の16進数表記を許可します。</p><p>16進数表記は<code>printf</code><code>%a/%A</code>を指定した場合に準拠します。</p><pre tabindex=0><code>hexf = 0xC0FFEEp-10
</code></pre><p><code>toml::format</code> は、渡された <code>toml::spec</code><code>ext_hex_format</code><code>true</code> の場合のみ
16進表記でフォーマットします。
フォーマット情報で <code>hex</code> が指定されているにも関わらず <code>toml::format</code> に渡された
<code>toml::spec</code><code>ext_hex_float</code><code>false</code> だった場合、16進数指定は無視され、
10進表記で最大の精度で出力されます。</p><h3 id=ext_num_suffix><code>ext_num_suffix</code>
<a class=anchor href=#ext_num_suffix>#</a></h3><div class=highlight><pre tabindex=0 style=color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-cpp data-lang=cpp><span style=display:flex><span><span style=color:#66d9ef>bool</span> ext_num_suffix;
</span></span></code></pre></div><p>toml11限定の言語拡張です。</p><p>どのバージョンを指定しても、<code>false</code>で初期化されます。
使用する際は個別に<code>true</code>にしてください。</p><p>10進数の整数と浮動小数点数に接尾辞を追加します。型を問わず、16進や8進、2進表記には適用されません。</p><p>数値と接尾辞の間は<code>_</code>で区切られている必要があります。</p><p>数値部分との区別のため、接尾辞は数値で始まることはできません。</p><pre tabindex=0><code>distance = 10_m # valid
distance = 10_2m # invalid
distance = 10_2_m # valid
</code></pre><p>接尾辞は <code>std::string suffix</code> としてフォーマット情報に保持されます。
数値部分とを分ける <code>_</code><code>suffix</code> に含まれません。</p><div class=highlight><pre tabindex=0 style=color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-cpp data-lang=cpp><span style=display:flex><span>toml<span style=color:#f92672>::</span>value distance <span style=color:#f92672>=</span> toml<span style=color:#f92672>::</span>find(input, <span style=color:#e6db74>&#34;distance&#34;</span>);
</span></span><span style=display:flex><span>assert(distance.as_integer_fmt().suffix <span style=color:#f92672>==</span> std<span style=color:#f92672>::</span>string(<span style=color:#e6db74>&#34;m&#34;</span>));
</span></span></code></pre></div><p><code>toml::format</code> は、渡された <code>toml::spec</code><code>ext_num_suffix</code><code>true</code> の場合のみ
これをフォーマットします。</p><p><code>suffix</code>は以下のような文法を持ちます。</p><div class=highlight><pre tabindex=0 style=color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-abnf data-lang=abnf><span style=display:flex><span><span style=color:#a6e22e>non-digit-graph</span> <span style=color:#f92672>=</span> <span style=color:#66d9ef>ALPHA</span> <span style=color:#f92672>/</span> <span style=color:#a6e22e>non-ascii</span>
</span></span><span style=display:flex><span><span style=color:#a6e22e>graph</span> <span style=color:#f92672>=</span> <span style=color:#66d9ef>ALPHA</span> <span style=color:#f92672>/</span> <span style=color:#66d9ef>DIGIT</span> <span style=color:#f92672>/</span> <span style=color:#a6e22e>non-ascii</span>
</span></span><span style=display:flex><span><span style=color:#a6e22e>suffix</span> <span style=color:#f92672>=</span> _ <span style=color:#a6e22e>non-digit-graph</span> <span style=color:#f92672>*</span>( <span style=color:#a6e22e>graph</span> <span style=color:#f92672>/</span> ( _ <span style=color:#a6e22e>graph</span> ) )
</span></span></code></pre></div><h3 id=ext_null_value><code>ext_null_value</code>
<a class=anchor href=#ext_null_value>#</a></h3><div class=highlight><pre tabindex=0 style=color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-cpp data-lang=cpp><span style=display:flex><span><span style=color:#66d9ef>bool</span> ext_null_value;
</span></span></code></pre></div><p>toml11限定の言語拡張です。</p><p>値として <code>null</code> を許可します。</p><p><code>null</code> を指定された <code>toml::value</code> は値を持たず、 <code>is_empty()</code><code>true</code> になります。</p><p><code>toml::format</code> は、渡された <code>toml::spec</code><code>ext_null_value</code><code>true</code> の場合のみ
<code>null</code> としてフォーマットします。
そうでない場合、 <code>toml::format</code> がエラーで終了します。</p></article><footer class=book-footer><div class="flex flex-wrap justify-between"></div><script>(function(){function e(e){const t=window.getSelection(),n=document.createRange();n.selectNodeContents(e),t.removeAllRanges(),t.addRange(n)}document.querySelectorAll("pre code").forEach(t=>{t.addEventListener("click",function(){if(window.getSelection().toString())return;e(t.parentElement),navigator.clipboard&&navigator.clipboard.writeText(t.parentElement.textContent)})})})()</script></footer><label for=menu-control class="hidden book-menu-overlay"></label></div><aside class=book-toc><div class=book-toc-content><nav id=TableOfContents><ul><li><a href=#spechpp>spec.hpp</a></li><li><a href=#tomlsemantic_version><code>toml::semantic_version</code></a><ul><li><a href=#メンバ関数>メンバ関数</a><ul><li><a href=#コンストラクタ>コンストラクタ</a></li></ul></li><li><a href=#非メンバ関数>非メンバ関数</a><ul><li><a href=#比較演算子>比較演算子</a></li><li><a href=#ストリーム演算子>ストリーム演算子</a></li><li><a href=#to_string><code>to_string</code></a></li></ul></li></ul></li><li><a href=#tomlspec><code>toml::spec</code></a><ul><li><a href=#メンバ関数-1>メンバ関数</a><ul><li><a href=#コンストラクタ-1>コンストラクタ</a></li><li><a href=#default_version><code>default_version()</code></a></li><li><a href=#vmajor-minor-patch><code>v(major, minor, patch)</code></a></li></ul></li><li><a href=#メンバ変数>メンバ変数</a><ul><li><a href=#例></a></li><li><a href=#v1_1_0_allow_control_characters_in_comments><code>v1_1_0_allow_control_characters_in_comments</code></a></li><li><a href=#v1_1_0_allow_newlines_in_inline_tables><code>v1_1_0_allow_newlines_in_inline_tables</code></a></li><li><a href=#v1_1_0_allow_trailing_comma_in_inline_tables><code>v1_1_0_allow_trailing_comma_in_inline_tables</code></a></li><li><a href=#v1_1_0_add_escape_sequence_e><code>v1_1_0_add_escape_sequence_e</code></a></li><li><a href=#v1_1_0_add_escape_sequence_x><code>v1_1_0_add_escape_sequence_x</code></a></li><li><a href=#v1_1_0_make_seconds_optional><code>v1_1_0_make_seconds_optional</code></a></li><li><a href=#ext_hex_float><code>ext_hex_float</code></a></li><li><a href=#ext_num_suffix><code>ext_num_suffix</code></a></li><li><a href=#ext_null_value><code>ext_null_value</code></a></li></ul></li></ul></li></ul></nav></div></aside></main></body></html>