Files
toml11/ja/docs/changelog/index.html
ToruNiina e671b8e3bd Merge pull request #291 from franzpoeschel/namespace-versioning
Use an inline namespace to distinguish emitted symbols by version numbers e4051f77d7
2025-05-17 07:21:19 +00:00

372 lines
63 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!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="
Change Log
#
v4.4.0
#
Added
#
toml::find_or_default() を追加 (by Ken Matsui @ken-matsui)
ordered_mapから値を削除できるよう変更 (by Sunlight @SunPodder)
値がアクセス済みかを調べるbool basic_value::accessed() constを追加
TOML11_ENABLE_ACCESS_CHECKが定義されているときのみ有効
toml::specに比較演算子を追加
Fixed
#
is_same<T, void>ではなくis_voidを使用するように修正 (by Ken Matsui @ken-matsui)
Changed
#
toml::parseのパフォーマンスを約2倍向上
GitHub ActionsでUbuntu 20のイメージの使用を終了
v4.3.0
#
Added
#
toml::findでstd::optional<T>をサポート
toml::visitで複数の引数をサポート
Fixed
#
初期化前に変数が使われるケースを修正 (by amatej @kontura)
CMake 3.21以前を使用する際の修正 (by Severin Leonhardt @SeverinLeonhardt)
非常に巨大な文字列が作成されるケースを修正 (by @hayt)
READMEのサンプルコードを修正、ToCを増強 (by somebody @oldoldtea) (by lz)
長い行のパースを高速化
MSVC 2017でのコンパイルエラーを修正
source_location::file_nameのヌルチェックを追加
Changed
#
hugo-bookテーマをアップデート
MSVC 2017をappveyor buildに追加
v4.2.0
#
Added
#
TOML11_DEFINE_CONVERSION_NON_INTRUSIVE で std::optional なメンバをサポート (by Ken Matsui @ken-matsui)
thread_localだったcolor_modeをデフォルトでグローバルにし、thread_localにするオプションを追加 (by Ken Matsui @ken-matsui)
CPMでの使い方をREADMEに追加
READMEにordered_mapへの言及を追加し、ドキュメントでの説明を追加
Fixed
#
ファイルサイズのstd::streamsizeへの変換で警告が出ることがある問題を修正 (by Pino Toscano @pinotree)
table_formatに不正な値が与えられた際の出力のtypoを修正
arrayのフォーマットがarray_of_tablesと指定されていてかつ空の場合の出力を修正
特定の環境でincludeが足りずにコンパイルできない問題を修正
ドキュメントに含まれる文法エラーを修正 (by Jack W)
toml::find_or を深くネストされたテーブルに使用した際にコンパイルが失敗する問題を修正
v4.1.0
#
Added
#
std::get<std::u8string>をサポート
toml::value(std::u8string)をサポート
string_type = std::u8stringをサポート
operator<<(std::ostream&, toml::value)をサポート
toml::integer_formatに、16進数表示で大文字を使うことを指定するbool uppercaseを追加
templateを使って実装された into_toml() をサポート (by 萧迩珀)
Fixed
#
Windowsで\r\nが改行に使われた際、出力時に\rが重複する問題を修正 (by Andreas Keller)
Changed
#
CIで複数コアを使うことでビルドを高速化
v4.0.3
#
Fixed
#
toml_fwd.hppを使用した際にデフォルト引数が重複する問題を修正
toml::valueを複数渡した際にtoml::make_error_infoが使えない問題を修正
std::reference_wrapperを持つtoml::resultをコピー・ムーブする際の問題を修正
hugoの最新版でドキュメントがビルドできない問題を修正
コンパイラによる軽微な警告を多数修正
CMakeの互換性に関する警告を抑制
Changed
#
CIビルドで-Werror, /WXを追加
CIビルドでMSVCのwarningレベルを/W3から/W4に変更
READMEでより多くの機能を紹介するよう更新
v4.0.2
#
Fixed
#
parse(FILE*) 内の fread の結果をチェック
toml11/version.hppのマクロを修正
コンパイルオプションに関するドキュメントの更新
ファイルオープンモードに関するドキュメントの更新
Changed
#
CMakeLists.txt内のバージョン番号をversion.hppから取得するように変更
v4.0.1
#
Fixed
#
sematic_version::{major, minor} と <sys/sysmacro.h> 内で定義されるマクロの衝突を解消
discard_comments の operator<< の定義を修正 (by Egor Pugin)
format_locationを使用した際に最初の空行が出ない問題を解決
改行文字のみを含む行を指すsource_locationでエラーメッセージを生成した際に、同じ行が二回表示される問題を解決
README.md内のリンクを修正
example/unicodeのREADMEのタイトルを修正
Added
#
mainに変更があったとき、single_include/toml.hppを自動生成するようCIを設定
v3からv4への変化
#
破壊的変更
#
toml::basic_valueのtemplate引数を変更
#
toml11 v3では、toml::basic_valueはコメントコンテナ、テーブル型コンテナ、配列型コンテナをそれぞれ取っていました。"><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/changelog/"><meta property="og:site_name" content="toml11"><meta property="og:title" content="changelog"><meta property="og:description" content="Change Log # v4.4.0 # Added # toml::find_or_default() を追加 (by Ken Matsui @ken-matsui) ordered_mapから値を削除できるよう変更 (by Sunlight @SunPodder) 値がアクセス済みかを調べるbool basic_value::accessed() constを追加 TOML11_ENABLE_ACCESS_CHECKが定義されているときのみ有効 toml::specに比較演算子を追加 Fixed # is_same<T, void>ではなくis_voidを使用するように修正 (by Ken Matsui @ken-matsui) Changed # toml::parseのパフォーマンスを約2倍向上 GitHub ActionsでUbuntu 20のイメージの使用を終了 v4.3.0 # Added # toml::findでstd::optional<T>をサポート toml::visitで複数の引数をサポート Fixed # 初期化前に変数が使われるケースを修正 (by amatej @kontura) CMake 3.21以前を使用する際の修正 (by Severin Leonhardt @SeverinLeonhardt) 非常に巨大な文字列が作成されるケースを修正 (by @hayt) READMEのサンプルコードを修正、ToCを増強 (by somebody @oldoldtea) (by lz) 長い行のパースを高速化 MSVC 2017でのコンパイルエラーを修正 source_location::file_nameのヌルチェックを追加 Changed # hugo-bookテーマをアップデート MSVC 2017をappveyor buildに追加 v4.2.0 # Added # TOML11_DEFINE_CONVERSION_NON_INTRUSIVE で std::optional なメンバをサポート (by Ken Matsui @ken-matsui) thread_localだったcolor_modeをデフォルトでグローバルにし、thread_localにするオプションを追加 (by Ken Matsui @ken-matsui) CPMでの使い方をREADMEに追加 READMEにordered_mapへの言及を追加し、ドキュメントでの説明を追加 Fixed # ファイルサイズのstd::streamsizeへの変換で警告が出ることがある問題を修正 (by Pino Toscano @pinotree) table_formatに不正な値が与えられた際の出力のtypoを修正 arrayのフォーマットがarray_of_tablesと指定されていてかつ空の場合の出力を修正 特定の環境でincludeが足りずにコンパイルできない問題を修正 ドキュメントに含まれる文法エラーを修正 (by Jack W) toml::find_or を深くネストされたテーブルに使用した際にコンパイルが失敗する問題を修正 v4.1.0 # Added # std::get<std::u8string>をサポート toml::value(std::u8string)をサポート string_type = std::u8stringをサポート operator<<(std::ostream&, toml::value)をサポート toml::integer_formatに、16進数表示で大文字を使うことを指定するbool uppercaseを追加 templateを使って実装された into_toml() をサポート (by 萧迩珀) Fixed # Windowsで\r\nが改行に使われた際、出力時に\rが重複する問題を修正 (by Andreas Keller) Changed # CIで複数コアを使うことでビルドを高速化 v4.0.3 # Fixed # toml_fwd.hppを使用した際にデフォルト引数が重複する問題を修正 toml::valueを複数渡した際にtoml::make_error_infoが使えない問題を修正 std::reference_wrapperを持つtoml::resultをコピー・ムーブする際の問題を修正 hugoの最新版でドキュメントがビルドできない問題を修正 コンパイラによる軽微な警告を多数修正 CMakeの互換性に関する警告を抑制 Changed # CIビルドで-Werror, /WXを追加 CIビルドでMSVCのwarningレベルを/W3から/W4に変更 READMEでより多くの機能を紹介するよう更新 v4.0.2 # Fixed # parse(FILE*) 内の fread の結果をチェック toml11/version.hppのマクロを修正 コンパイルオプションに関するドキュメントの更新 ファイルオープンモードに関するドキュメントの更新 Changed # CMakeLists.txt内のバージョン番号をversion.hppから取得するように変更 v4.0.1 # Fixed # sematic_version::{major, minor} と <sys/sysmacro.h> 内で定義されるマクロの衝突を解消 discard_comments の operator<< の定義を修正 (by Egor Pugin) format_locationを使用した際に最初の空行が出ない問題を解決 改行文字のみを含む行を指すsource_locationでエラーメッセージを生成した際に、同じ行が二回表示される問題を解決 README.md内のリンクを修正 example/unicodeのREADMEのタイトルを修正 Added # mainに変更があったとき、single_include/toml.hppを自動生成するようCIを設定 v3からv4への変化 # 破壊的変更 # toml::basic_valueのtemplate引数を変更 # toml11 v3では、toml::basic_valueはコメントコンテナ、テーブル型コンテナ、配列型コンテナをそれぞれ取っていました。"><meta property="og:locale" content="ja"><meta property="og:type" content="website"><title>changelog | 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/changelog/><link rel=alternate hreflang=en href=https://toruniina.github.io/toml11/docs/changelog/ title=changelog><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><link rel=alternate type=application/rss+xml href=https://toruniina.github.io/toml11/ja/docs/changelog/index.xml title=toml11></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/changelog/>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>
<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/>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/ class=active>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>changelog</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=#change-log>Change Log</a></li><li><a href=#v440>v4.4.0</a><ul><li><a href=#added>Added</a></li><li><a href=#fixed>Fixed</a></li><li><a href=#changed>Changed</a></li></ul></li><li><a href=#v430>v4.3.0</a><ul><li><a href=#added-1>Added</a></li><li><a href=#fixed-1>Fixed</a></li><li><a href=#changed-1>Changed</a></li></ul></li><li><a href=#v420>v4.2.0</a><ul><li><a href=#added-2>Added</a></li><li><a href=#fixed-2>Fixed</a></li></ul></li><li><a href=#v410>v4.1.0</a><ul><li><a href=#added-3>Added</a></li><li><a href=#fixed-3>Fixed</a></li><li><a href=#changed-2>Changed</a></li></ul></li><li><a href=#v403>v4.0.3</a><ul><li><a href=#fixed-4>Fixed</a></li><li><a href=#changed-3>Changed</a></li></ul></li><li><a href=#v402>v4.0.2</a><ul><li><a href=#fixed-5>Fixed</a></li><li><a href=#changed-4>Changed</a></li></ul></li><li><a href=#v401>v4.0.1</a><ul><li><a href=#fixed-6>Fixed</a></li><li><a href=#added-4>Added</a></li></ul></li><li><a href=#v3からv4への変化>v3からv4への変化</a><ul><li><a href=#破壊的変更>破壊的変更</a><ul><li><a href=#tomlbasic_valueのtemplate引数を変更><code>toml::basic_value</code><code>template</code>引数を変更</a></li><li><a href=#tomlbasic_valueのstdinitializer_listサポートを削除><code>toml::basic_value</code><code>std::initializer_list</code>サポートを削除</a></li><li><a href=#tomlbasic_valueis_uninitialized-を-is_empty-に変更><code>toml::basic_value::is_uninitialized()</code><code>is_empty()</code> に変更</a></li><li><a href=#tomlstring-を廃止フォーマット情報を陽に格納><code>toml::string</code> を廃止、フォーマット情報を陽に格納</a></li><li><a href=#tomlformatの引数を変更><code>toml::format</code>の引数を変更</a></li><li><a href=#tomlsource_locationのメンバ関数を変更><code>toml::source_location</code>のメンバ関数を変更</a></li><li><a href=#tomlformat_underlineをtomlformat_locationに変更><code>toml::format_underline</code><code>toml::format_location</code>に変更</a></li><li><a href=#format_errorの引数を変更><code>format_error</code>の引数を変更</a></li><li><a href=#tomlcolor-の制御を変更><code>toml::color</code> の制御を変更</a></li></ul></li><li><a href=#破壊的でない変更>破壊的でない変更</a><ul><li><a href=#parse_strの追加><code>parse_str</code>の追加</a></li><li><a href=#try_parseの追加><code>try_parse</code>の追加</a></li><li><a href=#バイト列のパースをサポート>バイト列のパースをサポート</a></li><li><a href=#tomlspecの追加><code>toml::spec</code>の追加</a></li><li><a href=#フォーマット情報の追加>フォーマット情報の追加</a></li><li><a href=#デフォルトでコメントを維持するよう変更>デフォルトでコメントを維持するよう変更</a></li><li><a href=#single_includetomlhpp-の追加><code>single_include/toml.hpp</code> の追加</a></li><li><a href=#コンパイル済みライブラリを選択可能に>コンパイル済みライブラリを選択可能に</a></li><li><a href=#リファレンスドキュメントの追加>リファレンス・ドキュメントの追加</a></li></ul></li></ul></li></ul></nav></aside></header><article class="markdown book-article"><h1 id=change-log>Change Log
<a class=anchor href=#change-log>#</a></h1><h1 id=v440>v4.4.0
<a class=anchor href=#v440>#</a></h1><h2 id=added>Added
<a class=anchor href=#added>#</a></h2><ul><li><code>toml::find_or_default()</code> を追加 (by Ken Matsui @ken-matsui)</li><li><code>ordered_map</code>から値を削除できるよう変更 (by Sunlight @SunPodder)</li><li>値がアクセス済みかを調べる<code>bool basic_value::accessed() const</code>を追加<ul><li><code>TOML11_ENABLE_ACCESS_CHECK</code>が定義されているときのみ有効</li></ul></li><li><code>toml::spec</code>に比較演算子を追加</li></ul><h2 id=fixed>Fixed
<a class=anchor href=#fixed>#</a></h2><ul><li><code>is_same&lt;T, void></code>ではなく<code>is_void</code>を使用するように修正 (by Ken Matsui @ken-matsui)</li></ul><h2 id=changed>Changed
<a class=anchor href=#changed>#</a></h2><ul><li><code>toml::parse</code>のパフォーマンスを約2倍向上</li><li>GitHub ActionsでUbuntu 20のイメージの使用を終了</li></ul><h1 id=v430>v4.3.0
<a class=anchor href=#v430>#</a></h1><h2 id=added-1>Added
<a class=anchor href=#added-1>#</a></h2><ul><li><code>toml::find</code><code>std::optional&lt;T></code>をサポート</li><li><code>toml::visit</code>で複数の引数をサポート</li></ul><h2 id=fixed-1>Fixed
<a class=anchor href=#fixed-1>#</a></h2><ul><li>初期化前に変数が使われるケースを修正 (by amatej @kontura)</li><li>CMake 3.21以前を使用する際の修正 (by Severin Leonhardt @SeverinLeonhardt)</li><li>非常に巨大な文字列が作成されるケースを修正 (by @hayt)</li><li>READMEのサンプルコードを修正、ToCを増強 (by somebody @oldoldtea) (by lz)</li><li>長い行のパースを高速化</li><li>MSVC 2017でのコンパイルエラーを修正</li><li><code>source_location::file_name</code>のヌルチェックを追加</li></ul><h2 id=changed-1>Changed
<a class=anchor href=#changed-1>#</a></h2><ul><li>hugo-bookテーマをアップデート</li><li>MSVC 2017をappveyor buildに追加</li></ul><h1 id=v420>v4.2.0
<a class=anchor href=#v420>#</a></h1><h2 id=added-2>Added
<a class=anchor href=#added-2>#</a></h2><ul><li><code>TOML11_DEFINE_CONVERSION_NON_INTRUSIVE</code><code>std::optional</code> なメンバをサポート (by Ken Matsui @ken-matsui)</li><li><code>thread_local</code>だった<code>color_mode</code>をデフォルトでグローバルにし、<code>thread_local</code>にするオプションを追加 (by Ken Matsui @ken-matsui)</li><li>CPMでの使い方を<code>README</code>に追加</li><li><code>README</code><code>ordered_map</code>への言及を追加し、ドキュメントでの説明を追加</li></ul><h2 id=fixed-2>Fixed
<a class=anchor href=#fixed-2>#</a></h2><ul><li>ファイルサイズの<code>std::streamsize</code>への変換で警告が出ることがある問題を修正 (by Pino Toscano @pinotree)</li><li><code>table_format</code>に不正な値が与えられた際の出力のtypoを修正</li><li><code>array</code>のフォーマットが<code>array_of_tables</code>と指定されていてかつ空の場合の出力を修正</li><li>特定の環境で<code>include</code>が足りずにコンパイルできない問題を修正</li><li>ドキュメントに含まれる文法エラーを修正 (by Jack W)</li><li><code>toml::find_or</code> を深くネストされたテーブルに使用した際にコンパイルが失敗する問題を修正</li></ul><h1 id=v410>v4.1.0
<a class=anchor href=#v410>#</a></h1><h2 id=added-3>Added
<a class=anchor href=#added-3>#</a></h2><ul><li><code>std::get&lt;std::u8string></code>をサポート</li><li><code>toml::value(std::u8string)</code>をサポート</li><li><code>string_type = std::u8string</code>をサポート</li><li><code>operator&lt;&lt;(std::ostream&, toml::value)</code>をサポート</li><li><code>toml::integer_format</code>に、16進数表示で大文字を使うことを指定する<code>bool uppercase</code>を追加</li><li><code>template</code>を使って実装された <code>into_toml()</code> をサポート (by 萧迩珀)</li></ul><h2 id=fixed-3>Fixed
<a class=anchor href=#fixed-3>#</a></h2><ul><li>Windowsで<code>\r\n</code>が改行に使われた際、出力時に<code>\r</code>が重複する問題を修正 (by Andreas Keller)</li></ul><h2 id=changed-2>Changed
<a class=anchor href=#changed-2>#</a></h2><ul><li>CIで複数コアを使うことでビルドを高速化</li></ul><h1 id=v403>v4.0.3
<a class=anchor href=#v403>#</a></h1><h2 id=fixed-4>Fixed
<a class=anchor href=#fixed-4>#</a></h2><ul><li><code>toml_fwd.hpp</code>を使用した際にデフォルト引数が重複する問題を修正</li><li><code>toml::value</code>を複数渡した際に<code>toml::make_error_info</code>が使えない問題を修正</li><li><code>std::reference_wrapper</code>を持つ<code>toml::result</code>をコピー・ムーブする際の問題を修正</li><li>hugoの最新版でドキュメントがビルドできない問題を修正</li><li>コンパイラによる軽微な警告を多数修正</li><li>CMakeの互換性に関する警告を抑制</li></ul><h2 id=changed-3>Changed
<a class=anchor href=#changed-3>#</a></h2><ul><li>CIビルドで<code>-Werror</code>, <code>/WX</code>を追加</li><li>CIビルドでMSVCのwarningレベルを<code>/W3</code>から<code>/W4</code>に変更</li><li>READMEでより多くの機能を紹介するよう更新</li></ul><h1 id=v402>v4.0.2
<a class=anchor href=#v402>#</a></h1><h2 id=fixed-5>Fixed
<a class=anchor href=#fixed-5>#</a></h2><ul><li><code>parse(FILE*)</code> 内の <code>fread</code> の結果をチェック</li><li><code>toml11/version.hpp</code>のマクロを修正</li><li>コンパイルオプションに関するドキュメントの更新</li><li>ファイルオープンモードに関するドキュメントの更新</li></ul><h2 id=changed-4>Changed
<a class=anchor href=#changed-4>#</a></h2><ul><li><code>CMakeLists.txt</code>内のバージョン番号を<code>version.hpp</code>から取得するように変更</li></ul><h1 id=v401>v4.0.1
<a class=anchor href=#v401>#</a></h1><h2 id=fixed-6>Fixed
<a class=anchor href=#fixed-6>#</a></h2><ul><li><code>sematic_version::{major, minor}</code><code>&lt;sys/sysmacro.h></code> 内で定義されるマクロの衝突を解消</li><li><code>discard_comments</code><code>operator&lt;&lt;</code> の定義を修正 (by Egor Pugin)</li><li><code>format_location</code>を使用した際に最初の空行が出ない問題を解決</li><li>改行文字のみを含む行を指す<code>source_location</code>でエラーメッセージを生成した際に、同じ行が二回表示される問題を解決</li><li><code>README.md</code>内のリンクを修正</li><li><code>example/unicode</code>のREADMEのタイトルを修正</li></ul><h2 id=added-4>Added
<a class=anchor href=#added-4>#</a></h2><ul><li><code>main</code>に変更があったとき、<code>single_include/toml.hpp</code>を自動生成するようCIを設定</li></ul><h1 id=v3からv4への変化>v3からv4への変化
<a class=anchor href=#v3%e3%81%8b%e3%82%89v4%e3%81%b8%e3%81%ae%e5%a4%89%e5%8c%96>#</a></h1><h2 id=破壊的変更>破壊的変更
<a class=anchor href=#%e7%a0%b4%e5%a3%8a%e7%9a%84%e5%a4%89%e6%9b%b4>#</a></h2><h3 id=tomlbasic_valueのtemplate引数を変更><code>toml::basic_value</code><code>template</code>引数を変更
<a class=anchor href=#tomlbasic_value%e3%81%aetemplate%e5%bc%95%e6%95%b0%e3%82%92%e5%a4%89%e6%9b%b4>#</a></h3><p>toml11 v3では、<code>toml::basic_value</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>template</span><span style=color:#f92672>&lt;</span><span style=color:#66d9ef>typename</span> Comment,
</span></span><span style=display:flex><span> <span style=color:#66d9ef>template</span><span style=color:#f92672>&lt;</span><span style=color:#66d9ef>typename</span> ...<span style=color:#f92672>&gt;</span> <span style=color:#66d9ef>class</span> <span style=color:#a6e22e>Table</span> <span style=color:#f92672>=</span> std<span style=color:#f92672>::</span>unordered_map,
</span></span><span style=display:flex><span> <span style=color:#66d9ef>template</span><span style=color:#f92672>&lt;</span><span style=color:#66d9ef>typename</span> ...<span style=color:#f92672>&gt;</span> <span style=color:#66d9ef>class</span> <span style=color:#a6e22e>Array</span> <span style=color:#f92672>=</span> std<span style=color:#f92672>::</span>vector<span style=color:#f92672>&gt;</span>
</span></span><span style=display:flex><span><span style=color:#66d9ef>class</span> <span style=color:#a6e22e>basic_value</span>;
</span></span></code></pre></div><p>ですが、<code>integer_type</code>などを変更したいという場合にはこれでは対応できません。</p><p>toml11 v4では、<code>toml::basic_value</code>は単一の<code>TypeConfig</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>template</span><span style=color:#f92672>&lt;</span><span style=color:#66d9ef>typename</span> TypeConfig<span style=color:#f92672>&gt;</span>
</span></span><span style=display:flex><span><span style=color:#66d9ef>class</span> <span style=color:#a6e22e>basic_value</span>;
</span></span></code></pre></div><p>デフォルトでは<code>toml::value</code>が格納する型は変わりません。</p><p>型を変更する際は、
<a href=https://toruniina.github.io/toml11/ja/docs/reference/types/><code>type_config</code></a>
を参照してください。</p><h3 id=tomlbasic_valueのstdinitializer_listサポートを削除><code>toml::basic_value</code><code>std::initializer_list</code>サポートを削除
<a class=anchor href=#tomlbasic_value%e3%81%aestdinitializer_list%e3%82%b5%e3%83%9d%e3%83%bc%e3%83%88%e3%82%92%e5%89%8a%e9%99%a4>#</a></h3><p>toml11 v3では、 <code>toml::value</code><code>std::initializer_list</code> を取るオーバーロードが用意されていました。</p><p>これにより、 <code>toml::value</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:#75715e>// toml11 v3
</span></span></span><span style=display:flex><span><span style=color:#75715e></span>toml<span style=color:#f92672>::</span>value v{<span style=color:#ae81ff>1</span>,<span style=color:#ae81ff>2</span>,<span style=color:#ae81ff>3</span>,<span style=color:#ae81ff>4</span>,<span style=color:#ae81ff>5</span>};
</span></span><span style=display:flex><span>toml<span style=color:#f92672>::</span>value v{ {<span style=color:#e6db74>&#34;a&#34;</span>, <span style=color:#ae81ff>42</span>}, {<span style=color:#e6db74>&#34;b&#34;</span>, <span style=color:#e6db74>&#34;foo&#34;</span>} };
</span></span></code></pre></div><p>しかし、これは同時に以下のような問題を引き起こしました。</p><p>一つ目は、1要素の配列と通常の値の区別がつかず、常に配列になってしまうことです。</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:#75715e>// toml11 v3
</span></span></span><span style=display:flex><span><span style=color:#75715e></span>toml<span style=color:#f92672>::</span>value v{<span style=color:#ae81ff>1</span>}; <span style=color:#75715e>// 1 ではなく [1,] になってしまう
</span></span></span></code></pre></div><p>統一初期化記法が普及した現在、これは非常に不便です。</p><p>二つ目は、値が全て文字列のテーブルと、ネストされた配列の区別がつかないことです。</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:#75715e>// toml11 v3
</span></span></span><span style=display:flex><span><span style=color:#75715e></span>toml<span style=color:#f92672>::</span>value v{ {<span style=color:#e6db74>&#34;a&#34;</span>, <span style=color:#e6db74>&#34;foo&#34;</span>}, {<span style=color:#e6db74>&#34;b&#34;</span>, <span style=color:#e6db74>&#34;bar&#34;</span>} };
</span></span><span style=display:flex><span><span style=color:#75715e>// {a = &#34;foo&#34;, b = &#34;bar&#34;}
</span></span></span><span style=display:flex><span><span style=color:#75715e>// [[&#34;a&#34;, &#34;foo&#34;], [&#34;b&#34;, &#34;bar&#34;]]
</span></span></span><span style=display:flex><span><span style=color:#75715e>// のどちらでもあり得る
</span></span></span></code></pre></div><p>これらの問題は言語仕様上解決が困難です。</p><p>toml11 v4では、混乱を避けるため、<code>std::initializer_list</code>サポートを削除しました。</p><p><code>toml::value</code> を配列で初期化する際はexplicitに <code>toml::array</code> を、
テーブルで初期化する際はexplicitに <code>toml::table</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:#75715e>// toml11 v4
</span></span></span><span style=display:flex><span><span style=color:#75715e></span>toml<span style=color:#f92672>::</span>value v(toml<span style=color:#f92672>::</span>array{<span style=color:#ae81ff>1</span>,<span style=color:#ae81ff>2</span>,<span style=color:#ae81ff>3</span>,<span style=color:#ae81ff>4</span>,<span style=color:#ae81ff>5</span>});
</span></span><span style=display:flex><span>toml<span style=color:#f92672>::</span>value v(toml<span style=color:#f92672>::</span>table{ {<span style=color:#e6db74>&#34;a&#34;</span>, <span style=color:#ae81ff>42</span>}, {<span style=color:#e6db74>&#34;b&#34;</span>, <span style=color:#e6db74>&#34;foo&#34;</span>} });
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>toml<span style=color:#f92672>::</span>value v{toml<span style=color:#f92672>::</span>array{<span style=color:#ae81ff>1</span>}}; <span style=color:#75715e>// [1,]
</span></span></span><span style=display:flex><span><span style=color:#75715e></span>toml<span style=color:#f92672>::</span>value v{<span style=color:#ae81ff>1</span>} <span style=color:#75715e>// 1
</span></span></span><span style=display:flex><span><span style=color:#75715e></span>
</span></span><span style=display:flex><span>toml<span style=color:#f92672>::</span>value v{toml<span style=color:#f92672>::</span>table{{<span style=color:#e6db74>&#34;a&#34;</span>, <span style=color:#e6db74>&#34;foo&#34;</span>}, {<span style=color:#e6db74>&#34;b&#34;</span>, <span style=color:#e6db74>&#34;bar&#34;</span>}}};
</span></span><span style=display:flex><span>toml<span style=color:#f92672>::</span>value v{toml<span style=color:#f92672>::</span>array{toml<span style=color:#f92672>::</span>array{<span style=color:#e6db74>&#34;a&#34;</span>, <span style=color:#e6db74>&#34;foo&#34;</span>}, toml<span style=color:#f92672>::</span>array{<span style=color:#e6db74>&#34;b&#34;</span>, <span style=color:#e6db74>&#34;bar&#34;</span>}}};
</span></span></code></pre></div><p>これにより <code>toml::value</code> をテーブルや配列で初期化する際に少し不便になりますが、
explicitに型情報を記述することにより予測不能な値になることは避けることができます。</p><h3 id=tomlbasic_valueis_uninitialized-を-is_empty-に変更><code>toml::basic_value::is_uninitialized()</code><code>is_empty()</code> に変更
<a class=anchor href=#tomlbasic_valueis_uninitialized-%e3%82%92-is_empty-%e3%81%ab%e5%a4%89%e6%9b%b4>#</a></h3><p>toml11 v3では、初期化されていない <code>basic_value</code> かどうかを判定する関数は
<code>is_uninitialized</code> でした。</p><p>しかし、toml11 v4では言語拡張で <code>null </code>をサポートするため、意図的に空にされた値が構築される可能性があります。
なので命名を変更し、 <code>is_empty</code> としました。</p><h3 id=tomlstring-を廃止フォーマット情報を陽に格納><code>toml::string</code> を廃止、フォーマット情報を陽に格納
<a class=anchor href=#tomlstring-%e3%82%92%e5%bb%83%e6%ad%a2%e3%83%95%e3%82%a9%e3%83%bc%e3%83%9e%e3%83%83%e3%83%88%e6%83%85%e5%a0%b1%e3%82%92%e9%99%bd%e3%81%ab%e6%a0%bc%e7%b4%8d>#</a></h3><p>toml11 v3では、文字列が <code>basic</code><code>literal</code> かの情報を保持するため、
格納する文字列型に <code>toml::string</code> という <code>std::string</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:#75715e>// toml11 v3
</span></span></span><span style=display:flex><span><span style=color:#75715e></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>enum</span> <span style=color:#66d9ef>class</span> <span style=color:#a6e22e>string_t</span> <span style=color:#f92672>:</span> std<span style=color:#f92672>::</span><span style=color:#66d9ef>uint8_t</span>
</span></span><span style=display:flex><span>{
</span></span><span style=display:flex><span> basic <span style=color:#f92672>=</span> <span style=color:#ae81ff>0</span>,
</span></span><span style=display:flex><span> literal <span style=color:#f92672>=</span> <span style=color:#ae81ff>1</span>,
</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>struct</span> <span style=color:#a6e22e>string</span>
</span></span><span style=display:flex><span>{
</span></span><span style=display:flex><span> string_t kind;
</span></span><span style=display:flex><span> std<span style=color:#f92672>::</span>string str;
</span></span><span style=display:flex><span>};
</span></span><span style=display:flex><span>} <span style=color:#75715e>// toml
</span></span></span></code></pre></div><p>toml11 v4では、数値型の基数や配列を複数行にするかどうかなどのより多くのフォーマット情報を持たせるため、
全ての型に <code>xxx_format</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:#75715e>// toml11 v4
</span></span></span><span style=display:flex><span><span style=color:#75715e></span><span style=color:#66d9ef>enum</span> <span style=color:#66d9ef>class</span> <span style=color:#a6e22e>string_format</span> <span style=color:#f92672>:</span> std<span style=color:#f92672>::</span><span style=color:#66d9ef>uint8_t</span>
</span></span><span style=display:flex><span>{
</span></span><span style=display:flex><span> basic <span style=color:#f92672>=</span> <span style=color:#ae81ff>0</span>,
</span></span><span style=display:flex><span> literal <span style=color:#f92672>=</span> <span style=color:#ae81ff>1</span>,
</span></span><span style=display:flex><span> multiline_basic <span style=color:#f92672>=</span> <span style=color:#ae81ff>2</span>,
</span></span><span style=display:flex><span> multiline_literal <span style=color:#f92672>=</span> <span style=color:#ae81ff>3</span>
</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>struct</span> <span style=color:#a6e22e>string_format_info</span>
</span></span><span style=display:flex><span>{
</span></span><span style=display:flex><span> string_format fmt <span style=color:#f92672>=</span> string_format<span style=color:#f92672>::</span>basic;
</span></span><span style=display:flex><span> <span style=color:#66d9ef>bool</span> start_with_newline <span style=color:#f92672>=</span> false;
</span></span><span style=display:flex><span>};
</span></span></code></pre></div><p>これにより、より細かいフォーマット情報を保持することができるようになり、
特に数値型や配列、テーブル型のフォーマット情報がパース後も維持できるようになりました。</p><h3 id=tomlformatの引数を変更><code>toml::format</code>の引数を変更
<a class=anchor href=#tomlformat%e3%81%ae%e5%bc%95%e6%95%b0%e3%82%92%e5%a4%89%e6%9b%b4>#</a></h3><p>toml11 v3では、 <code>toml::format</code> が数値型の精度や幅などの値を受け取っていました。</p><p>しかし、これでは細かなフォーマット指定ができず、予想したようなファイルにシリアライズできませんでした。</p><p>toml11 v4では、各 <code>toml::value</code> にそれぞれのフォーマット情報を格納したため、
より細かいフォーマット情報を <code>toml::value</code> 自体が持ち運べるようになりました。</p><p>これにより、 <code>toml::format</code> 自体はフォーマット指定を受け取らず、
フォーマット時に使用できる言語機能フラグを持つ <code>toml::spec</code> のみを取るようになりました。</p><h3 id=tomlsource_locationのメンバ関数を変更><code>toml::source_location</code>のメンバ関数を変更
<a class=anchor href=#tomlsource_location%e3%81%ae%e3%83%a1%e3%83%b3%e3%83%90%e9%96%a2%e6%95%b0%e3%82%92%e5%a4%89%e6%9b%b4>#</a></h3><p>toml11 v3では、 <code>toml::source_location</code> のメンバ型は一行分だけを意識したものでした。</p><p>toml11 v4では、 <code>toml::source_location</code> のメンバ型は複数行が前提になります。</p><h3 id=tomlformat_underlineをtomlformat_locationに変更><code>toml::format_underline</code><code>toml::format_location</code>に変更
<a class=anchor href=#tomlformat_underline%e3%82%92tomlformat_location%e3%81%ab%e5%a4%89%e6%9b%b4>#</a></h3><p>toml11 v3では、 <code>toml::source_location</code> を使用して位置情報を文字列化するとき、
<code>toml::format_underline</code> を使用していました。</p><p>しかしこれは名称としてわかりにくいため、 <code>toml::format_location</code> に変更しました。</p><h3 id=format_errorの引数を変更><code>format_error</code>の引数を変更
<a class=anchor href=#format_error%e3%81%ae%e5%bc%95%e6%95%b0%e3%82%92%e5%a4%89%e6%9b%b4>#</a></h3><p>toml11 v3ではエラー情報を表すクラスがなかったため、<code>toml::format_error</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>template</span><span style=color:#f92672>&lt;</span><span style=color:#66d9ef>typename</span> C, <span style=color:#66d9ef>template</span><span style=color:#f92672>&lt;</span><span style=color:#66d9ef>typename</span> ...<span style=color:#f92672>&gt;</span> <span style=color:#66d9ef>class</span> <span style=color:#a6e22e>T</span>, <span style=color:#66d9ef>template</span><span style=color:#f92672>&lt;</span><span style=color:#66d9ef>typename</span> ...<span style=color:#f92672>&gt;</span> <span style=color:#66d9ef>class</span> <span style=color:#a6e22e>A</span><span style=color:#f92672>&gt;</span>
</span></span><span style=display:flex><span>std<span style=color:#f92672>::</span>string format_error(<span style=color:#66d9ef>const</span> std<span style=color:#f92672>::</span>string<span style=color:#f92672>&amp;</span> err_msg,
</span></span><span style=display:flex><span> <span style=color:#66d9ef>const</span> basic_value<span style=color:#f92672>&lt;</span>C, T, A<span style=color:#f92672>&gt;&amp;</span> v, <span style=color:#66d9ef>const</span> std<span style=color:#f92672>::</span>string<span style=color:#f92672>&amp;</span> comment,
</span></span><span style=display:flex><span> std<span style=color:#f92672>::</span>vector<span style=color:#f92672>&lt;</span>std<span style=color:#f92672>::</span>string<span style=color:#f92672>&gt;</span> hints <span style=color:#f92672>=</span> {},
</span></span><span style=display:flex><span> <span style=color:#66d9ef>const</span> <span style=color:#66d9ef>bool</span> colorize <span style=color:#f92672>=</span> TOML11_ERROR_MESSAGE_COLORIZED);
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#66d9ef>template</span><span style=color:#f92672>&lt;</span><span style=color:#66d9ef>typename</span> C, <span style=color:#66d9ef>template</span><span style=color:#f92672>&lt;</span><span style=color:#66d9ef>typename</span> ...<span style=color:#f92672>&gt;</span> <span style=color:#66d9ef>class</span> <span style=color:#a6e22e>T</span>, <span style=color:#66d9ef>template</span><span style=color:#f92672>&lt;</span><span style=color:#66d9ef>typename</span> ...<span style=color:#f92672>&gt;</span> <span style=color:#66d9ef>class</span> <span style=color:#a6e22e>A</span><span style=color:#f92672>&gt;</span>
</span></span><span style=display:flex><span><span style=color:#66d9ef>inline</span> std<span style=color:#f92672>::</span>string format_error(<span style=color:#66d9ef>const</span> std<span style=color:#f92672>::</span>string<span style=color:#f92672>&amp;</span> err_msg,
</span></span><span style=display:flex><span> <span style=color:#66d9ef>const</span> toml<span style=color:#f92672>::</span>basic_value<span style=color:#f92672>&lt;</span>C, T, A<span style=color:#f92672>&gt;&amp;</span> v1, <span style=color:#66d9ef>const</span> std<span style=color:#f92672>::</span>string<span style=color:#f92672>&amp;</span> comment1,
</span></span><span style=display:flex><span> <span style=color:#66d9ef>const</span> toml<span style=color:#f92672>::</span>basic_value<span style=color:#f92672>&lt;</span>C, T, A<span style=color:#f92672>&gt;&amp;</span> v2, <span style=color:#66d9ef>const</span> std<span style=color:#f92672>::</span>string<span style=color:#f92672>&amp;</span> comment2,
</span></span><span style=display:flex><span> std<span style=color:#f92672>::</span>vector<span style=color:#f92672>&lt;</span>std<span style=color:#f92672>::</span>string<span style=color:#f92672>&gt;</span> hints <span style=color:#f92672>=</span> {},
</span></span><span style=display:flex><span> <span style=color:#66d9ef>const</span> <span style=color:#66d9ef>bool</span> colorize <span style=color:#f92672>=</span> TOML11_ERROR_MESSAGE_COLORIZED);
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#66d9ef>template</span><span style=color:#f92672>&lt;</span><span style=color:#66d9ef>typename</span> C, <span style=color:#66d9ef>template</span><span style=color:#f92672>&lt;</span><span style=color:#66d9ef>typename</span> ...<span style=color:#f92672>&gt;</span> <span style=color:#66d9ef>class</span> <span style=color:#a6e22e>T</span>, <span style=color:#66d9ef>template</span><span style=color:#f92672>&lt;</span><span style=color:#66d9ef>typename</span> ...<span style=color:#f92672>&gt;</span> <span style=color:#66d9ef>class</span> <span style=color:#a6e22e>A</span><span style=color:#f92672>&gt;</span>
</span></span><span style=display:flex><span><span style=color:#66d9ef>inline</span> std<span style=color:#f92672>::</span>string format_error(<span style=color:#66d9ef>const</span> std<span style=color:#f92672>::</span>string<span style=color:#f92672>&amp;</span> err_msg,
</span></span><span style=display:flex><span> <span style=color:#66d9ef>const</span> toml<span style=color:#f92672>::</span>basic_value<span style=color:#f92672>&lt;</span>C, T, A<span style=color:#f92672>&gt;&amp;</span> v1, <span style=color:#66d9ef>const</span> std<span style=color:#f92672>::</span>string<span style=color:#f92672>&amp;</span> comment1,
</span></span><span style=display:flex><span> <span style=color:#66d9ef>const</span> toml<span style=color:#f92672>::</span>basic_value<span style=color:#f92672>&lt;</span>C, T, A<span style=color:#f92672>&gt;&amp;</span> v2, <span style=color:#66d9ef>const</span> std<span style=color:#f92672>::</span>string<span style=color:#f92672>&amp;</span> comment2,
</span></span><span style=display:flex><span> <span style=color:#66d9ef>const</span> toml<span style=color:#f92672>::</span>basic_value<span style=color:#f92672>&lt;</span>C, T, A<span style=color:#f92672>&gt;&amp;</span> v3, <span style=color:#66d9ef>const</span> std<span style=color:#f92672>::</span>string<span style=color:#f92672>&amp;</span> comment3,
</span></span><span style=display:flex><span> std<span style=color:#f92672>::</span>vector<span style=color:#f92672>&lt;</span>std<span style=color:#f92672>::</span>string<span style=color:#f92672>&gt;</span> hints <span style=color:#f92672>=</span> {},
</span></span><span style=display:flex><span> <span style=color:#66d9ef>const</span> <span style=color:#66d9ef>bool</span> colorize <span style=color:#f92672>=</span> TOML11_ERROR_MESSAGE_COLORIZED);
</span></span></code></pre></div><p>toml11 v4では、<code>class error_info</code><code>make_error_info</code>を導入し、<code>format_error</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>std<span style=color:#f92672>::</span>string format_error(<span style=color:#66d9ef>const</span> error_info<span style=color:#f92672>&amp;</span> err);
</span></span><span style=display:flex><span>std<span style=color:#f92672>::</span>string format_error(<span style=color:#66d9ef>const</span> std<span style=color:#f92672>::</span>string<span style=color:#f92672>&amp;</span> errkind, <span style=color:#66d9ef>const</span> error_info<span style=color:#f92672>&amp;</span> err);
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#66d9ef>template</span><span style=color:#f92672>&lt;</span><span style=color:#66d9ef>typename</span> ... Ts<span style=color:#f92672>&gt;</span>
</span></span><span style=display:flex><span>std<span style=color:#f92672>::</span>string format_error(std<span style=color:#f92672>::</span>string title,
</span></span><span style=display:flex><span> source_location loc, std<span style=color:#f92672>::</span>string msg, Ts<span style=color:#f92672>&amp;&amp;</span> ... tail);
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#66d9ef>template</span><span style=color:#f92672>&lt;</span><span style=color:#66d9ef>typename</span> TC, <span style=color:#66d9ef>typename</span> ... Ts<span style=color:#f92672>&gt;</span>
</span></span><span style=display:flex><span>std<span style=color:#f92672>::</span>string format_error(std<span style=color:#f92672>::</span>string title,
</span></span><span style=display:flex><span> <span style=color:#66d9ef>const</span> basic_value<span style=color:#f92672>&lt;</span>TC<span style=color:#f92672>&gt;&amp;</span> v, std<span style=color:#f92672>::</span>string msg, Ts<span style=color:#f92672>&amp;&amp;</span> ... tail);
</span></span></code></pre></div><h3 id=tomlcolor-の制御を変更><code>toml::color</code> の制御を変更
<a class=anchor href=#tomlcolor-%e3%81%ae%e5%88%b6%e5%be%a1%e3%82%92%e5%a4%89%e6%9b%b4>#</a></h3><p>toml11 v3では、出力に色を付けるかどうかに <code>toml::colorize</code> というマニピュレータを、
<code>toml::color::enable/disable</code> と並列で使用していました。</p><p>マニピュレータはストリームごとに色を付けるかどうかを決定できるものでしたが、
v4でストリームを使用する頻度が下がったことと、内部で使用する
<code>std::ios_base::xalloc</code> がC++11ではスレッドセーフではないことなどから、
<code>toml::color::enable/disable</code> のみを使用するようにし、 <code>toml::colorize</code> を削除しました。</p><h2 id=破壊的でない変更>破壊的でない変更
<a class=anchor href=#%e7%a0%b4%e5%a3%8a%e7%9a%84%e3%81%a7%e3%81%aa%e3%81%84%e5%a4%89%e6%9b%b4>#</a></h2><h3 id=parse_strの追加><code>parse_str</code>の追加
<a class=anchor href=#parse_str%e3%81%ae%e8%bf%bd%e5%8a%a0>#</a></h3><p>toml11 v3では、文字列そのものを取る<code>toml::parse</code>関数はありませんでした。
なので文字列をパースする際には<code>std::istringstream</code>を使う必要がありました。</p><p>これは不便なので、<code>toml::parse_str</code>を追加し、文字列を直接パース出来るようにしました。</p><h3 id=try_parseの追加><code>try_parse</code>の追加
<a class=anchor href=#try_parse%e3%81%ae%e8%bf%bd%e5%8a%a0>#</a></h3><p>toml11 v3では、パーサはエラーを発見した際には<code>toml::syntax_error</code>を送出していました。</p><p>しかし、例外を投げられない環境や、パフォーマンスの都合や記法の都合によって例外を投げたくない場合があります。</p><p>toml11 v4では <code>toml::result</code> を使用して、例外を投げずにパース失敗を伝える <code>toml::try_parse</code> を実装しました。</p><p>これも必ず例外を投げないというわけではなく、使用している標準ライブラリの内部でのエラー、
例えばメモリ不足によるアロケーション失敗での <code>std::bad_alloc</code> などは送出される可能性があります。</p><h3 id=バイト列のパースをサポート>バイト列のパースをサポート
<a class=anchor href=#%e3%83%90%e3%82%a4%e3%83%88%e5%88%97%e3%81%ae%e3%83%91%e3%83%bc%e3%82%b9%e3%82%92%e3%82%b5%e3%83%9d%e3%83%bc%e3%83%88>#</a></h3><p>ファイルなど以外の方法で得られたTOMLコンテンツをパース出来るようにするため、
<code>std::vector&lt;unsigned char></code> を受け取る <code>toml::parse</code>, <code>toml::try_parse</code> を追加しました。</p><h3 id=tomlspecの追加><code>toml::spec</code>の追加
<a class=anchor href=#tomlspec%e3%81%ae%e8%bf%bd%e5%8a%a0>#</a></h3><p>toml11 v3では、TOML言語側の新機能は全て取り込み、またTOML言語の新バージョンに導入されることが決定した機能も
マクロ <code>TOML11_USE_UNRELEASED_TOML_FEATURES</code> によって制御していました。</p><p>これは、toml11 v3を開発していた時点では TOML言語は0.4.0から0.5.0で、1.0.0に到達していなかったためです。</p><p>最新のTOML言語仕様に全てのユーザーが詳しいわけではないため、
古い言語使用に基づいたエラーメッセージを表示すると、コミュニティ全体を混乱させてしまいます。
よって、v1.0.0に達するまでは、できる限り素早く新しい言語仕様を提供し、かつユーザーにもアップデートを促す必要がありました。</p><p>しかし、現在のTOML言語仕様はv1.0.0です。
そのため、TOML v1.1.0がリリースされた後でもv1.0.0を使用する、という選択肢に気を配る必要が生じました。</p><p>よって、より柔軟にTOML言語仕様を選択できるよう、<code>toml::spec</code>を導入して、TOML言語バージョンを実行時に変更できるようにしました。</p><p>また、<code>toml::spec</code>では言語機能ごとにフラグを設定し、特定の言語機能のみを試すこともできるようにしました。</p><p>これは、toml11 v4特有の言語拡張でも使用します。</p><h3 id=フォーマット情報の追加>フォーマット情報の追加
<a class=anchor href=#%e3%83%95%e3%82%a9%e3%83%bc%e3%83%9e%e3%83%83%e3%83%88%e6%83%85%e5%a0%b1%e3%81%ae%e8%bf%bd%e5%8a%a0>#</a></h3><p>toml11 v3では、文字列を除いてフォーマット情報が保存されず、シリアライズ時に考慮できるのは幅と精度だけでした。</p><p>しかし、これでは16進数整数がシリアライズ時に10進数になってしまったり、確実にinline tableにする方法がありませんでした。</p><p>toml11 v4では、全てのTOML型にフォーマット情報<code>integer_format</code> etcを追加し、
パース時とシリアライズ時に考慮するようにしました。</p><p>これによって、16進数整数や、インラインテーブル等のフォーマット情報をより細かく、値ごとに設定できるようになりました。</p><h3 id=デフォルトでコメントを維持するよう変更>デフォルトでコメントを維持するよう変更
<a class=anchor href=#%e3%83%87%e3%83%95%e3%82%a9%e3%83%ab%e3%83%88%e3%81%a7%e3%82%b3%e3%83%a1%e3%83%b3%e3%83%88%e3%82%92%e7%b6%ad%e6%8c%81%e3%81%99%e3%82%8b%e3%82%88%e3%81%86%e5%a4%89%e6%9b%b4>#</a></h3><p>toml11 v3では、デフォルトではコメントがパースされず、シリアライズもされませんでした。</p><p>これは、コメントが後期に導入された機能で、特別なハックによって読み込まれていたためです。</p><p>toml11 v4では、デフォルトでコメントをパースし、保存し、シリアライズするようになりました。</p><p>また、パーサの実装も大幅に変更され、コメントが他の要素と同様にパースされるようになりました。</p><h3 id=single_includetomlhpp-の追加><code>single_include/toml.hpp</code> の追加
<a class=anchor href=#single_includetomlhpp-%e3%81%ae%e8%bf%bd%e5%8a%a0>#</a></h3><p>toml11は多機能なライブラリなので、開発効率のために機能ごとに異なるヘッダファイルを持っています。
ですが、これはインストールにある程度の手間が必要ということでもあります。</p><p>そこで、toml11 v4から全てのヘッダファイルを適切な順序で結合した <code>single_include/toml.hpp</code> ファイルを追加し、
単一のファイルで完結するライブラリをコピーするだけで導入できるようにしました。</p><h3 id=コンパイル済みライブラリを選択可能に>コンパイル済みライブラリを選択可能に
<a class=anchor href=#%e3%82%b3%e3%83%b3%e3%83%91%e3%82%a4%e3%83%ab%e6%b8%88%e3%81%bf%e3%83%a9%e3%82%a4%e3%83%96%e3%83%a9%e3%83%aa%e3%82%92%e9%81%b8%e6%8a%9e%e5%8f%af%e8%83%bd%e3%81%ab>#</a></h3><p>toml11は <code>template</code> を多用しているため、コンパイル時間が長くなります。</p><p>toml11 v4では、できるだけコンパイル可能な関数を増やし、それらを先にライブラリとしてコンパイルできるようにしました。</p><p>これにより、大規模な開発で使用する際にコンパイル時間を短くできると期待できます。</p><h3 id=リファレンスドキュメントの追加>リファレンス・ドキュメントの追加
<a class=anchor href=#%e3%83%aa%e3%83%95%e3%82%a1%e3%83%ac%e3%83%b3%e3%82%b9%e3%83%89%e3%82%ad%e3%83%a5%e3%83%a1%e3%83%b3%e3%83%88%e3%81%ae%e8%bf%bd%e5%8a%a0>#</a></h3><p>これまでは、READMEにすべてのfeatureを記載しており、関数の詳細な定義を示すリファレンスや、また日本語での資料などがありませんでした。</p><p>toml11 v4では、リファレンスを追加したドキュメントを同梱し、また日本語・英語両方で同一の内容を記載します。</p><p>ただし、ライブラリ作者は日本語母語話者であるため、日本語の内容を第一とし、英語の内容がそれと異なっていた場合は日本語の内容が正しいものとします。</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=#change-log>Change Log</a></li><li><a href=#v440>v4.4.0</a><ul><li><a href=#added>Added</a></li><li><a href=#fixed>Fixed</a></li><li><a href=#changed>Changed</a></li></ul></li><li><a href=#v430>v4.3.0</a><ul><li><a href=#added-1>Added</a></li><li><a href=#fixed-1>Fixed</a></li><li><a href=#changed-1>Changed</a></li></ul></li><li><a href=#v420>v4.2.0</a><ul><li><a href=#added-2>Added</a></li><li><a href=#fixed-2>Fixed</a></li></ul></li><li><a href=#v410>v4.1.0</a><ul><li><a href=#added-3>Added</a></li><li><a href=#fixed-3>Fixed</a></li><li><a href=#changed-2>Changed</a></li></ul></li><li><a href=#v403>v4.0.3</a><ul><li><a href=#fixed-4>Fixed</a></li><li><a href=#changed-3>Changed</a></li></ul></li><li><a href=#v402>v4.0.2</a><ul><li><a href=#fixed-5>Fixed</a></li><li><a href=#changed-4>Changed</a></li></ul></li><li><a href=#v401>v4.0.1</a><ul><li><a href=#fixed-6>Fixed</a></li><li><a href=#added-4>Added</a></li></ul></li><li><a href=#v3からv4への変化>v3からv4への変化</a><ul><li><a href=#破壊的変更>破壊的変更</a><ul><li><a href=#tomlbasic_valueのtemplate引数を変更><code>toml::basic_value</code><code>template</code>引数を変更</a></li><li><a href=#tomlbasic_valueのstdinitializer_listサポートを削除><code>toml::basic_value</code><code>std::initializer_list</code>サポートを削除</a></li><li><a href=#tomlbasic_valueis_uninitialized-を-is_empty-に変更><code>toml::basic_value::is_uninitialized()</code><code>is_empty()</code> に変更</a></li><li><a href=#tomlstring-を廃止フォーマット情報を陽に格納><code>toml::string</code> を廃止、フォーマット情報を陽に格納</a></li><li><a href=#tomlformatの引数を変更><code>toml::format</code>の引数を変更</a></li><li><a href=#tomlsource_locationのメンバ関数を変更><code>toml::source_location</code>のメンバ関数を変更</a></li><li><a href=#tomlformat_underlineをtomlformat_locationに変更><code>toml::format_underline</code><code>toml::format_location</code>に変更</a></li><li><a href=#format_errorの引数を変更><code>format_error</code>の引数を変更</a></li><li><a href=#tomlcolor-の制御を変更><code>toml::color</code> の制御を変更</a></li></ul></li><li><a href=#破壊的でない変更>破壊的でない変更</a><ul><li><a href=#parse_strの追加><code>parse_str</code>の追加</a></li><li><a href=#try_parseの追加><code>try_parse</code>の追加</a></li><li><a href=#バイト列のパースをサポート>バイト列のパースをサポート</a></li><li><a href=#tomlspecの追加><code>toml::spec</code>の追加</a></li><li><a href=#フォーマット情報の追加>フォーマット情報の追加</a></li><li><a href=#デフォルトでコメントを維持するよう変更>デフォルトでコメントを維持するよう変更</a></li><li><a href=#single_includetomlhpp-の追加><code>single_include/toml.hpp</code> の追加</a></li><li><a href=#コンパイル済みライブラリを選択可能に>コンパイル済みライブラリを選択可能に</a></li><li><a href=#リファレンスドキュメントの追加>リファレンス・ドキュメントの追加</a></li></ul></li></ul></li></ul></nav></div></aside></main></body></html>