Проблема с выбором специализации шаблона с использованием автоматического аргумента и временного объекта - PullRequest
1 голос
/ 19 января 2020

Учитывая следующий код, со специализацией функции шаблона с автоматическим аргументом ...

#include <iostream>
#include <string>

template<typename T>
void f(auto val);

template<>
void f<int>(const std::string&) { std::cout << "ok\n"; }

int main() {
    f<int, const std::string&>("xxx");  // ok
    // f<int>("xxx");                   // won't compile    

    f<int, const std::string&>(std::string("xxx"));  // ok
    // f<int>(std::string("xxx"));                   // won't compile
}

Почему компилятор не может (G CC w / C ++ 17 в этом case) выбрать специализацию без явного указания типа автоматического аргумента?

...