namespace boost {
namespace nfp {
template<typename NP, typename Keyword> struct has_param;
template<typename NP, typename Rest, typename Keyword>
struct has_param<named_parameter_combine< NP, Rest >, Keyword>;
template<typename T> struct is_named_param_pack;
template<typename T, typename unique_id, typename RefType>
struct is_named_param_pack<named_parameter< T, unique_id, RefType >>;
template<typename NP, typename Rest>
struct is_named_param_pack<named_parameter_combine< NP, Rest >>;
template<typename unique_id, bool required = false> struct keyword;
template<typename T, typename unique_id, typename RefType>
struct named_parameter;
template<typename NP, typename Rest = nil> struct named_parameter_combine;
struct nil;
template<typename NP, typename Keyword, typename DefaultType = void>
struct param_type;
template<typename NP, typename Rest, typename Keyword,
typename DefaultType>
struct param_type<named_parameter_combine< NP, Rest >, Keyword, DefaultType>;
template<typename T, typename unique_id, bool required>
struct typed_keyword;
template<typename unique_id, bool required>
struct typed_keyword<bool, unique_id, required>;
typedef named_parameter< char, struct no_params_type_t, char > no_params_type;
template<typename T, typename Params, typename Keyword>
enable_if_c<!has_param< Params, Keyword >::value, void >::type
opt_assign(T &, Params const &, Keyword);
template<typename T, typename Params, typename Keyword>
enable_if_c< has_param< Params, Keyword >::value, void >::type
opt_assign(T & target, Params const & p, Keyword k);
template<typename T, typename Params, typename Keyword>
T opt_get(Params const & p, Keyword k, T default_val);
template<typename Params, typename NP>
enable_if_c<!has_param< Params, keyword< typename NP::id > >::value, named_parameter_combine< NP, Params > >::type
opt_append(Params const & params, NP const & np);
template<typename Params, typename NP>
enable_if_c< has_param< Params, keyword< typename NP::id > >::value, Params >::type
opt_append(Params const & params, NP const &);
}
}