Boost.Parameter パラメータをoptionalとして取得する

Boost.Parameterでは、引数パックからboost::optionalで任意の引数を取り出すことは直接的にサポートされていないようですが、デフォルト値としてboost::noneを指定すればできるようです。

#include <cassert>
#include <string>
#include <boost/optional.hpp>
#include <boost/parameter/name.hpp>

BOOST_PARAMETER_NAME(name)
BOOST_PARAMETER_NAME(visible)

template <class ArgumentPack>
void make_window(const ArgumentPack& args)
{
    // 必須パラメータ
    const std::string window_name = args[_name];

    // 省略可能パラメータ
    const boost::optional<bool> is_visible = args[_visible | boost::none];

    assert(window_name == "TitleWindow");
    assert(!is_visible);
}

int main()
{
    make_window((_name = "TitleWindow"));
}