Changelog

Unreleased

v3.4.0

Fixes
Additions
  • added support for using enums with value_or()
Changes:
  • renamed header files to have .hpp extension (toml.h is still present for backwards-compatibility)
Build system:
  • fixed meson builds with -Ddefault_library=static having hidden symbols on GNU compilers (#201) (@vlad0x00)

v3.3.0

Released 2023-01-29

Fixes:
  • fixed null pointer dereference in parser when exceptions are disabled (#169) (@ncaklovic)
  • fixed spurious warnings in MSVC 19.34
  • fixed toml::parse_file() on windows for non-ASCII paths
  • fixed a spurious table redefinition error (#187) (@jorisvr)
  • fixed UB edge-case in integer parsing (#188) (@jorisvr)
  • fixed some build issues with Apple-flavoured Clang (#189) (@eddelbuettel)
Additions:
Removals:
Build system:

v3.2.0

Released 2022-08-29

Fixes:
Additions:
Changes:
  • relaxed cvref requirements of is_homogeneous(), emplace(), emplace_back(), emplace_hint()
  • relaxed mantissa and digits10 requirements of extended float support

v3.1.0

Released 2022-04-22

Fixes:
  • fixed potential segfault when calling at_path() with an empty string
  • fixed UB in internal unicode machinery (#144) (@kchalmer)
  • fixed a number of spurious warnings with Clang 10 (#145, #146) (@chronoxor)
Additions:
  • added toml::array::for_each()
  • added toml::table::for_each()
  • added config options TOML_EXPORTED_CLASS, TOML_EXPORTED_MEMBER_FUNCTION, TOML_EXPORTED_STATIC_FUNCTION & TOML_EXPORTED_FREE_FUNCTION
  • added support for escape sequence \e when using TOML_ENABLE_UNRELEASED_FEATURES (toml/790)
  • added support for more unicode in bare keys when using TOML_ENABLE_UNRELEASED_FEATURES (toml/891)
Removals/Deprecations:
  • deprecated old TOML_API option in favour new TOML_EXPORTED_X options (it will continue to work as it did before if none of the new function export options are defined)
Build system:
  • meson: added compile_library option (@Tachi107)
  • meson: added ubsan_tests and ubsan_examples options
  • meson: use system dependencies where available when building tests (@Tachi107)

v3.0.1

Released 2022-01-13

This is a single-bugfix release to fix an ODR issue for people using header-only mode in multiple translation units. If you aren't seeing linker errors because of toml::array::insert_at(), this release holds nothing of value over v3.0.0.

Fixes:
  • fixed erroneous use of TOML_API causing ODR issue (#136) (@Azarael)

v3.0.0

Released 2022-01-11

This release will be a major version bump, so it's ABI breaks all around. Any changes that are likely to cause migration issues (API changes, build system breakage, etc.) are indicated with ⚠️.

Fixes:
  • ⚠️ fixed toml::table init-list constructor requiring double-brackets
  • ⚠️ fixed TOML_API + extern templates causing linker errors in some circumstances
  • ⚠️ fixed incorrect noexcept specifications on many functions
  • ⚠️ fixed missing TOML_API on some interfaces
  • fixed toml::json_formatter not formatting inf and nan incorrectly
  • fixed a number of spec conformance issues (#127, #128, #129, #130, #131, #132, #135) (@moorereason)
  • fixed an illegal table redefinition edge case (#112) (@python36)
  • fixed documentation issues
  • fixed GCC bug causing memory leak during parse failures (#123, #124) (@rsmmr, @ronalabraham)
  • fixed incorrect handling of vertical whitespace in keys when printing TOML to streams
  • fixed incorrect source position in redefinition error messages
  • fixed missing includes <initializer_list>, <utility>
  • fixed parser not correctly round-tripping the format of binary and octal integers in some cases
  • fixed some incorrect unicode scalar sequence transformations (#125)
  • fixed strong exception guarantee edge-cases in toml::table and toml::array
Additions:
Changes:
  • ⚠️ toml::format_flags is now backed by uint64_t (was previously uint8_t)
  • ⚠️ toml::source_index is now an alias for uint32_t unconditionally (was previously dependent on TOML_LARGE_FILES)
  • ⚠️ toml::table now uses toml::key as the key type (was previously std::string)
  • ⚠️ toml::value_flags is now backed by uint16_t (was previously uint8_t)
  • ⚠️ made all overloaded operators 'hidden friends' where possible
  • ⚠️ renamed toml::default_formatter to toml::toml_formatter (toml::default_formatter is now an alias)
  • ⚠️ renamed TOML_PARSER option to TOML_ENABLE_PARSER (TOML_PARSER will continue to work but is deprecated)
  • ⚠️ renamed TOML_UNRELEASED_FEATURES to TOML_ENABLE_UNRELEASED_FEATURES (TOML_UNRELEASED_FEATURES will continue to work but is deprecated)
  • ⚠️ renamed TOML_WINDOWS_COMPAT to TOML_ENABLE_WINDOWS_COMPAT (TOML_WINDOWS_COMPAT will continue to work but is deprecated)
  • applied clang-format to all the things 🎉️
  • exposed TOML_NAMESPACE_START and TOML_NAMESPACE_END macros to help with ADL specialization scenarios
  • improved performance of parser
  • made date/time constructors accept any integral types
  • moved all implementation headers to /impl
  • renamed all implementation headers to .h and 'source' headers to .inl
  • updated conformance tests
Removals:
  • ⚠️ removed toml::format_flags::allow_value_format_flags
  • ⚠️ removed TOML_LARGE_FILES (it is now default - explicitly setting TOML_LARGE_FILES to 0 will invoke an #error)
  • ⚠️ removed unnecessary template machinery (esp. where ostreams were involved)
  • removed unnecessary uses of final
Build system:
  • ⚠️ increased minimum required meson version to 0.54.0
  • disabled 'install' path when being used as a meson subproject (#114) (@Tachi107)
  • fixed builds failing with meson 0.6.0 (#117) (@Tachi107)
  • general meson improvements and fixes (#115) (@Tachi107)
  • used override_dependency where supported (#116) (@Tachi107)

v2.5.0

Released 2021-07-11

Fixes:
  • fixed linkage error with windows compat mode
  • fixed TOML_CONSTEVAL broken in MSVC (again)
  • fixed minor documentation bugs
  • fixed cmake project version being incorrect (#110) (@GiulioRomualdi)
Additions:
  • added support for lowercase 't' and 'z' in datetimes (per spec)
  • added natvis file to cmake install (#106) (@Ryan-rsm-McKenzie)
  • added VS cpp.hint file to cmake install
  • added metafunctions is_container, is_chronological, is_value, is_node, inserted_type_of
Changes:
  • improved debug code size by removing unnecessary std::forwards and std::moves
  • modernized the CMake build files (#102, #103, #105) (@friendlyanon)
  • updated conformance tests

v2.4.0

Released 2021-05-19

Fixes:
  • fixed node::value() not retrieving inf and nan correctly
  • fixed dotted kvps being unable to add subtables (#61) (@Validark)
  • fixed linker error on linux ICC (#83) (@blackwer)
  • fixed segfault JSON-formatting a failed parse_result (#96) (@proydakov)
  • fixed spurious newline after JSON formatting a table
  • fixed VS intellisense not detecting TOML_COMPILER_EXCEPTIONS correctly
  • fixed crash with pathologically-nested inputs (#100) (@geeknik)
  • fixed parse_result natvis
  • fixed false-positive char8_t support detection on older compilers
  • fixed unnecessary #include <Windows.h> Windows builds (@BeastLe9enD)
  • fixed TOML_CONSTEVAL breaking on VS 16.10.0pre2
  • fixed spurious warnings with MSVC /Wall
  • fixed missing blank lines between consecutive empty tables/A-o-T
  • fixed unnecessary TOML_API declarations
  • fixed many small documentation issues
Additions:
Removals:
  • removed explicit #include <fstream> requirement for parse_file()

v2.3.0

Released 2020-12-29

Fixes:
  • fixed compiler errors caused by <charconv> with Apple-flavoured clang
  • fixed array and table iterators missing iterator_category (#77) (@HazardyKnusperkeks)
  • fixed Wuseless-cast warnings on GCC 10 (#75) (@HazardyKnusperkeks)
  • fixed formatter not correctly line wrapping in some rare circumstances (#73) (@89z)
  • fixed an unnecessary global compiler flag breaking builds when used as a meson subproject (#72) (@jamabr)
  • fixed link error caused by <charconv> on emscripten (#71) (@suy)
  • fixed ambiguity with the toml::literals inline namespace (#69) (@std-any-emplace)
  • fixed formatter emitting superfluous newlines after printing tables (#68) (@std-any-emplace)
  • fixed array and table iterators not converting between const and non-const versions of themselves (#67) (@std-any-emplace)
  • fixed some parser crashes when given pathologically-malformed UTF-8 (#65) (@sneves)

v2.2.0

Released 2020-08-09

Fixes:
  • fixed some issues building with VS2017 (#55) (@sobczyk)
  • fixed _Float16 erroneously detected as supported on g++ (#57) (@sobczyk)
  • fixed <Windows.h> causing compilation failure on mingw (#63) (@rezahousseini)
  • fixed CMake and pkg-config files not being installed into architecture-agnostic directories (#59) (@tambry)
  • fixed memory leak during parsing (#64) (@sneves)
  • fixed ambiguous operator== error on MSVC (#56) (@HellsingDarge)
Additions:
  • added additional node_view constructors
  • added ability to specify serialization format of integer values
  • added integer value serialization format round trip (e.g. hex in, hex out)
Changes:
  • updated conformance tests
  • TOML version bump to v1.0.0-rc.3
  • refactors and cleanups based on feedback given here
Build system:
  • renamed build options to snake_case
  • tests, examples and cmake config now explicitly disabled when used as a subproject
  • removed small_binaries (it's now implicit when building as release)
  • bumped minimum meson version to 0.53

v2.1.0

Released 2020-07-11

Fixes:
  • fixed inconsistent emission of leading/trailing newlines when writing a table to an ostream (#48) (@levicki)
  • fixed Wcast-align warning spam on ARM
  • fixed array::insert not working correctly in some cases
  • fixed node::value_or() not having the same semantics as node::value() (#50) (@whiterabbit963)
  • fixed 'misleading assignment' of rvalue node_views (#52) (@Reedbeta)
  • fixed some issues handling infinities and NaNs (#51) (@Reedbeta)
  • fixed some minor documentation issues
Additions:
  • added support for __fp16, _Float16, __float128, __int128_t and __uint128_t
  • added copy construction/assignment for arrays, tables and values
  • added insert, emplace, push_back etc. compatibility with node_views
  • added node::is_homogenous
  • added table::is_homogenous
  • added value::is_homogenous (just for generic code's sake)
  • added is_homogenous overload for identifying failure-causing element
  • added implicit conversion operator from node to node_view (#52) (@Reedbeta)
Changes:
  • renamed TOML_ALL_INLINE to TOML_HEADER_ONLY (the old name will still work, but is no longer documented)
  • general cleanup

v2.0.0

Released 2020-07-20

This release contains a fairly significant number of 'quality of life' improvements, yay! But also necessitates an ABI break (hence the version number bump). Changes that might block a migration are annotated with ⚠️.

Fixes:
  • fixed infinity and NaN-related code breaking when using -ffast-math and friends
  • fixed narrowing conversion warnings when constructing int values from unsigned
  • fixed Visual Studio debugger native visualizations for date, time, time_offset, date_time
  • fixed some static assert messages being badly formatted on clang
  • fixed internal macro assert_or_assume leaking out of toml_parser.hpp
Additions:
  • added additional types allowed in node::value() and node::value_or() (see value() dox for examples)
  • added additional types allowed in node_view::value() and node_view::value_or()
  • added node::value_exact() and node_view::value_exact()
  • added support for interop with wide strings on Windows:
    • added wide-string path arg overloads of parse() and parse_file()
    • added wide-string support to all relevant table and array ops
    • added wide-string support to node::value(), node::value_or()
    • added wide-string support to node_view::value(), node_view::value_or()
    • added wide-string support to value<string> constructor
    • added wide-string overloads of node_view::operator[]
    • added source_region::wide_path()
    • added TOML_WINDOWS_COMPAT switch for explicitly enabling/disabling this stuff
  • added emission of 'literal' strings to the TOML serializer
  • added lots of minor documentation fixes and improvements
  • added Visual Studio debugger native visualizations for table, array, parse_result, and parse_error (#46) (@Reedbeta)
  • added non-template version of array::is_homogeneous()
  • added explicit instantiations of more template types when !TOML_ALL_INLINE
Changes:
  • ⚠️ deprecated parse_result::get() in favour of parse_result::table()
  • ⚠️ deprecated node_view::get() in favour of node_view::node()
  • ⚠️ simplified internal ABI namespaces
  • improved the quality of many static_assert error messages
Removals:
  • ⚠️ renamed date_time::time_offset to just 'offset'
  • ⚠️ removed TOML_CHAR_8_STRINGS since it no longer makes sense

v1.3.3

Released 2020-06-29

Fixes:
  • fixed some minor TOML spec conformance bugs
  • fixed BOM check causing EOF on very short iostream inputs
  • fixed std::numeric_limits::max() getting broken by macros in some environments
  • fixed 'unknown pragma' warning spam in older versions of GCC
  • fixed a few minor documentation issues
Additions:
  • added rvalue overload of array::flatten
  • added conformance tests from BurntSushi/toml-test and iarna/toml-spec-tests
  • added toml::inserter as a workaround for nested construction of single-element toml::arrays performing move-construction instead
  • added license boilerplate to test files
Changes:
  • refactored the parser to reduce binary size

v1.3.2

Released 2020-06-19

Fixes:
  • fixed single-digit negative integers parsing as positive
  • fixed parse failure when parsing an empty file
  • fixed multi-line strings being allowed in keys
  • fixed overflow for very long binary integer literals
Changes:
  • improved the performance of toml::parse_file
  • improved the performance of printing to streams for deepy-nested TOML data

v1.3.0

Released 2020-06-02

Fixes:
  • fixed formatter::print_inline() causing compilation failures in DLL builds
  • fixed BOMs occasionally causing overflow/crash in char8 mode
  • fixed some spurious warnings in GCC 10
  • fixed clang static analyzer warning in BOM handling code
Additions:
  • added table_iterator::operator ->
  • added array::resize() and array::truncate()
  • added array::capacity(), array::shrink_to_fit(), array::max_size()
  • added non-const -> const conversion for table and array iterators
Changes:
  • renamed table iterator proxy pair members to first and second to match STL

v1.2.5

Released 2020-04-24

Fixes:
  • fixed some multi-line string parsing issues
  • fixed pedantic warnings on gcc 10 and clang 11
  • fixed is_unicode_XXXXXX functions being wrong in some cases
  • fixed TOML_LIKELY not being correct on older versions of gcc and clang
  • fixed minor documentation issues (#26, #38) (@prince-chrismc)
Additions:
  • added additional error message cases to the parser
  • added error_printer example
  • added toml_generator example
Changes:
  • improved unicode-related codegen

v1.2.3

Released 2020-04-11

Fixes:
  • fixed printing of inf and nan
  • fixed parser not handling floats with leading '.' characters
  • fixed pedantic vtable warnings on clang with -Weverything
  • fixed a number of documentation bugs
  • fixed TOML_UNRELEASED_FEATURES default being 1 (it should have been 0)
Additions:
  • added TOML_PARSER configuration option
  • added TOML_LIB_SINGLE_HEADER indicator
  • added doxygen page for the configuration options
  • added SPDX-License-Identifiers around the place
Changes:
  • split some header files up to make future maintenance easier
  • refactored and greatly simplified parser

v1.2.0

Released 2020-04-07

Fixes:
  • fixed some parsing and printing ops being locale-dependent
  • fixed some parsing errors at EOF when TOML_EXCEPTIONS = 0
  • fixed some unreferenced variable warnings on older compilers
  • fixed some 'maybe-uninitialized' false-positives on GCC9
  • fixed pkgconfig subdir being wrong
Additions:
  • added support for implementations without <charconv>
  • added cmake package config generator (#22) (@GiulioRomualdi)
  • added build config feature option GENERATE_CMAKE_CONFIG
  • added many new tests

v1.1.0

Released 2020-04-03

Fixes:
  • fixed some parser error paths not returning early enough TOML_EXCEPTIONS=0
  • fixed a number of minor documentation issues
Additions:
  • added support for TOML 1.0.0-rc.1 🎉
  • added operator[], begin(), end() to toml::parse_result for TOML_EXCEPTIONS=0
  • added additional compilation speed improvements for TOML_ALL_INLINE=0
  • added more specific error messages for parsing errors relating to prohibited codepoints
  • added a large number of additional tests
  • added support for installation with meson (#16) (@ximion)
  • added the array and table iterators to the toml namespace

v1.0.0

Released 2020-03-28

Fixes:
  • fixed minor documentation issues
Changes:
  • refactoring of ABI-based inline namespaces

v0.6.0

Released 2020-03-24

Fixes:
  • fixed minor preprocessor/macro issues
  • fixed minor documentation issues
Additions:
  • added <cassert> include directly in 'debug' builds when TOML_ASSERT isn't defined
  • added Clang's [[trivial_abi]] attribute to date, time, time_offset

v0.5.0

Released 2020-03-18

Fixes:
  • fixed crash when reaching EOF while parsing a string when exceptions are disabled
  • fixed some attribute warnings in GCC
  • fixed build with GCC 8.2.0 (#15) (@shdnx)
  • fixed exception mode detection sometimes being incorrect on MSVC
  • fixed compilation on older implementations without std::launder
  • fixed json_formatter type deduction on older compilers
Additions:
  • added support for Unicode 13.0
  • added support for \xHH escape sequences (toml/pull/796)
  • added short-form license preamble to all source files
  • added build configuration option for compiling examples

v0.4.3

Released 2020-03-10

Fixes:
  • fixed ICE in VS2019 when using /std:c++17 instead of /std:c++latest
Additions:
  • added #error when TOML_EXCEPTIONS is set to 1 but compiler exceptions were disabled
Changes:
  • parsing performance improvements

v0.4.0

Released 2020-03-05

Fixes:
  • fixed parse_file() failing to compile with plain string literals
  • fixed tests being built when used as a meson subproject (#14) (@shdnx)
Additions:
  • added support for compiling into DLLs on windows (TOML_API)
  • added support for explicitly setting the TOML_EXCEPTION mode
  • added TOML_OPTIONAL_TYPE customization point
  • added node::ref() and node_view::ref()

v0.3.0

Released 2020-03-01

Fixes:
  • fixed some pedantic clang warnings
  • fixed some minor documentation errors
Additions:
  • added node::value() and node::value_or()
  • added node_view::value()
  • added relops for the date/time classes
  • added TOML_ALL_INLINE and TOML_IMPLEMENTATION options
  • added preliminary support for ICC
Removals:
  • removed <cmath> dependency

v0.2.1

Released 2020-02-26

Fixes:
  • fixed minor printing bug in operator<<(ostream, source_position)
  • fixed minor documentation issues
Additions:
Changes:
  • improved quality of error messages for boolean and inf/nan parsing

v0.2.0

Released 2020-02-23

Fixes:
  • fixed truncation of floating-point values when using ostreams
  • fixed missing value deduction guides for dates and times
  • fixed potential ODR issues relating to exception mode handling etc.
  • fixed some documentation issues
Additions:
  • added serialization round-trip tests
  • added node::is_number()
  • added node_view::is_number()
  • added node_view::value_or()
  • added hexfloat parsing support for all implementations (not just <charconv> ones)

v0.1.0

Released 2020-02-20

  • First public release, yay! 🎉️