toml spec

# TOML言語バージョン #

`toml::spec` によって、 `toml::parse` や `toml::format` で使用するTOML言語のバージョンや、個別の機能フラグを指定することができます。

## TOMLのバージョンを指定する #

`toml::spec` は `toml::semantic_version` から構築できます。

    #include <toml.hpp>

    int main()
    {
        toml::spec spec(toml::semantic_version(1, 1, 0));
        return 0;
    }

ですがこれは長いので、`toml::spec::v()`関数が用意されています。

    #include <toml.hpp>

    int main()
    {
        toml::spec spec = toml::spec::v(1, 1, 0);
        return 0;
    }

特に指定しない場合、デフォルトの値で構築する `toml::spec::default_version()` が使用されます。

デフォルトの値はtoml11のバージョンによって変わりますが、その時点でリリースされているTOML言語の最新バージョンに追従します。

v4.4.0現在、TOML v1.1.0はまだリリースされていないため、デフォルトのTOMLバージョンはv1.0.0です。

> TOML v1.1.0の一部の機能にはかなり長い議論が続いており、まだ差し戻される可能性があります。

> 実際に差し戻された場合、toml11はマイナーバージョンアップでそれらの機能を削除、もしくは対応するそれ以降のバージョンに移動します。

> そのような意味で、将来のバージョンに関する機能は全て不安定なものと考えてください。

### バージョン指定でパースする #

`toml::parse` のオーバーロードは、ファイル名に続いて`toml::spec`を受け取ります。

これによって、使用するTOMLバージョンを変更できます。

    #include <toml.hpp>

    int main()
    {
        toml::value input = toml::parse("input.toml", toml::spec::v(1, 1, 0));
        return 0;
    }

### バージョン指定でシリアライズする #

`toml::format` のオーバーロードは、 `toml::value` に続いて `toml::spec` を受け取ります。

これによって、使用するTOMLバージョンを変更できます。

    #include <toml.hpp>

    int main()
    {
        toml::value v = toml::parse("input.toml", toml::spec::v(1, 1, 0));
        std::cout << toml::format(v, toml::spec::v(1, 1, 0)) << std::endl;
        return 0;
    }

もしフォーマット変数などによって指定されているフォーマットが渡された `toml::spec` では許可されていないものだった場合、指定は無視されて他のフォーマットにフォールバックされます。

## TOMLに追加された新機能を個別に指定する #

TOMLのバージョンアップで追加された機能は複数あり、そのうちの一部だけを有効にすることが可能です。

    #include <toml.hpp>

    int main()
    {
        toml::spec spec = toml::spec::v(1, 0, 0);

        // インラインテーブル内での改行を許可
        spec.v1_1_0_allow_newlines_in_inline_tables = true;

        toml::value input = toml::parse("input.toml", spec);
        return 0;
    }

全てのフラグのリストは、 `toml::spec` を参照してください。