Учитывая следующий код, со специализацией функции шаблона с автоматическим аргументом ...
#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) выбрать специализацию без явного указания типа автоматического аргумента?