[Pragram Options in particular]std::basic_string usage

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
participants (1)
-
Sean Huang