namespace boost {
namespace icl {
struct partial_absorber;
struct partial_enricher;
struct total_absorber;
struct total_enricher;
template<typename DomainT, typename CodomainT,
typename Traits = icl::partial_absorber,
ICL_COMPARE Compare = ICL_COMPARE_INSTANCE(std::less, DomainT),
ICL_COMBINE Combine = ICL_COMBINE_INSTANCE(icl::inplace_plus, CodomainT),
ICL_SECTION Section = ICL_SECTION_INSTANCE(icl::inter_section, CodomainT),
ICL_ALLOC Alloc = std::allocator>
class map;
template<typename DomainT, typename CodomainT, typename Traits,
ICL_COMPARE Compare, ICL_COMBINE Combine, ICL_SECTION Section,
ICL_ALLOC Alloc>
struct is_map<icl::map< DomainT, CodomainT, Traits, Compare, Combine, Section, Alloc >>;
template<typename DomainT, typename CodomainT, typename Traits,
ICL_COMPARE Compare, ICL_COMBINE Combine, ICL_SECTION Section,
ICL_ALLOC Alloc>
struct has_inverse<icl::map< DomainT, CodomainT, Traits, Compare, Combine, Section, Alloc >>;
template<typename DomainT, typename CodomainT, typename Traits,
ICL_COMPARE Compare, ICL_COMBINE Combine, ICL_SECTION Section,
ICL_ALLOC Alloc>
struct absorbs_identities<icl::map< DomainT, CodomainT, Traits, Compare, Combine, Section, Alloc >>;
template<typename DomainT, typename CodomainT, typename Traits,
ICL_COMPARE Compare, ICL_COMBINE Combine, ICL_SECTION Section,
ICL_ALLOC Alloc>
struct is_total<icl::map< DomainT, CodomainT, Traits, Compare, Combine, Section, Alloc >>;
template<typename DomainT, typename CodomainT, typename Traits,
ICL_COMPARE Compare, ICL_COMBINE Combine, ICL_SECTION Section,
ICL_ALLOC Alloc>
struct type_to_string<icl::map< DomainT, CodomainT, Traits, Compare, Combine, Section, Alloc >>;
}
}