template argument deduction/substitution failed:
Непонимаю, почему не может определить тип автоматически. Наверное потому что передаю не тип, а значение.
Как быть??
template <typename T>
Params ToParams ( const Where& where, std::pair<std::string, T> var )
{
Params params = ToParams ( where );
params.insert( { var.first, ToString( var.second ) });
return params;
}
foo( const Where& where, const std::string& mask, std::string& msg )
{
Params params = ToParams( where , { std::string( "mask" ), mask } ); // fail
// Params params = ToParams<std::string>( where , { std::string( "mask" ), mask } ); // ok
}
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
Дело в том, что
{ std::string( "mask" ), mask }
это initializer_list, а не pair... Вот так должно пройти:
Params params = ToParams( where , make_pair(std::string( "mask" ), mask) );
потому что будет явно показан тип.