Boost logo

Boost :

From: Sean Huang (huangsean_at_[hidden])
Date: 2006-03-30 12:04:03


I noticed that a few boost libraries use std::basic_string differently. For
example, boost::program_options uses it like this:
template<class T, class charT>
void validate(boost::any& v,
                    const std::vector< std::basic_string<charT> >& xs,
                    T*, long);
And string_algorithm uses the following instead:

template<
    typename SequenceT,
    typename CharT,
    typename RegexTraitsT,
    typename FormatStringTraitsT, typename FormatStringAllocatorT >
    inline void replace_all_regex(
                                                SequenceT& Input,
                                                const basic_regex<CharT,
RegexTraitsT>& Rx,
                                                const
std::basic_string<CharT, FormatStringTraitsT, FormatStringAllocatorT>&
Format,
                                                match_flag_type
Flags=match_default | format_default );
The standard says std::basic_string has 3 template parameters (two have
defaults). Usages like std::basic_string<charT> would prevent the matching
of non-standard traits or allocators. And in the case of program_options, my
overload with 3 template parameters actually caused an ambiguity with one
defined in program_options:
My overload:
template< class CharType, class Traits, class Alloc >
void validate( boost::any& v,
                    const std::vector< std::basic_string< CharType, Traits,
Alloc > >& xs,
                    unsigned long*, long )

Defined in program_options:
template<class T, class charT>
void validate(boost::any& v,
                    const std::vector< std::basic_string<charT> >& xs,
                    T*, long)

My question is if the differences in usage is justified or just an oversight
and what the recommendation is?

Thanks,

Sean


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk