namespace boost {
namespace nfp {
template<typename T> struct is_named_params;
template<typename T, typename unique_id, typename ReferenceType>
struct is_named_params<named_parameter< T, unique_id, ReferenceType >>;
template<typename NP, typename Rest>
struct is_named_params<nfp_detail::named_parameter_combine< NP, Rest >>;
template<typename unique_id, bool required = false> struct keyword;
template<typename T, typename unique_id, typename ReferenceType = T&>
struct named_parameter;
template<typename Params, typename KeywordType,
typename DefaultType = void>
struct param_type;
template<typename T, typename unique_id, typename ReferenceType,
bool required, typename DefaultType>
struct param_type<named_parameter< T, unique_id, ReferenceType >, keyword< unique_id, required >, DefaultType>;
template<typename T, typename unique_id, typename ReferenceType,
typename Rest, bool required, typename DefaultType>
struct param_type<nfp_detail::named_parameter_combine< named_parameter< T, unique_id, ReferenceType >, Rest >, keyword< unique_id, required >, DefaultType>;
template<typename NP, typename Rest, typename Keyword,
typename DefaultType>
struct param_type<nfp_detail::named_parameter_combine< NP, Rest >, Keyword, DefaultType>;
template<typename T, typename unique_id, bool required = false>
struct typed_keyword;
template<typename unique_id> struct typed_keyword<bool, unique_id, false>;
template<typename T> void optionally_assign(T &, unspecified);
template<typename T, typename Source>
void optionally_assign(T & target, Source const & src);
template<typename T, typename Params, typename Keyword>
void optionally_assign(T & target, Params const & p, Keyword k);
}
}