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"));