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

потому что будет явно показан тип.

→ Ссылка