#include <string>
template
<
typename CharType,
template<class, class, class> class StringType = std::basic_string
<CharType, std::char_traits<CharType>, std::allocator<CharType>>
>
void f(CharType, StringType)
{}
int main()
{
char c;
std::string str;
f(c, str);
//
// error : default template argument for
// a template template parameter must be a class template
//
}
Pourquoi une valeur template template parameter
ne peut-elle pas être définie par défaut?Pourquoi un paramètre de modèle de modèle ne peut-il pas être défini par défaut?
Si vous lisez le message d'erreur, il dit que "un paramètre de modèle de template doit être *** un template de classe ***". 'std :: basic_string' par lui-même * est * un template de classe. 'std :: basic_string, std :: allocateur >' n'est * pas * un template, c'est une classe concrète dérivée du template 'std :: basic_string'. –