std::basic_string как параметр шаблона функции не может быть выведен из const char*

Почему ставит std::basic_string как параметр шаблона функции не сможет вывести из const char*, но его можно успешно вывести, когда он построен напрямую?

#include <string>
#include <iostream>
template<class Char/*, class Traits, class Allocator*/>   
                      //^doesn't matter whether the second and third template parameter is specified
void printString(std::basic_string<Char/*, Traits, Allocator*/> s)
{
    std::cout << s;
}
int main()
{
    printString("hello");    //nope
    std::basic_string s{ "hello" };//works
}

Я нашел соответствующий пост здесь, но ответы не объясняют причину

1 ответ

Решение

Поскольку неявное преобразование (из const char* к std::basic_string<char>) не учитывается при выводе аргумента шаблона, который не может определить параметр шаблонаChar.

Выведение типа не учитывает неявные преобразования (кроме корректировок типов, перечисленных выше): это задача разрешения перегрузки, которая происходит позже.

Вы можете явно указать аргумент шаблона,

printString<char>("hello");

Или пройти std::basic_string явно.

printString(std::basic_string("hello"));
Другие вопросы по тегам