Хорошо, это может показаться глупым вопросом, но вот оно:
template <typename T>
void foo(T& x)
{
}
int main()
{
foo(42);
// error in passing argument 1 of 'void foo(T&) [with T = int]'
}
Что мешает С++ создать экземпляр шаблона функции foo вместо T = const int?