У меня был какой-то код, который не удалось скомпилировать, что составляет нечто
как то, что показано ниже. Покопавшись, я наткнулся
пункт 14.1 примечания 5, в котором говорится:
cv-квалификаторы верхнего уровня в параметре шаблона игнорируются
при определении его типа.
Мой код выглядит так:
#include <iostream>
#include <typeinfo>
class Bar {};
template<class T>
void Func(T t)
{
std::cout << typeid(T).name() << "\n";
}
template<class T>
void Func(const T& t)
{
std::cout << "const ref : " << typeid(T).name() << "\n";
}
int main()
{
Bar bar;
const Bar& constBar = bar;
Func(constBar);
return 0;
}
Это дает ошибку компиляции:
In function 'int main()'
error: call of overloaded 'Func(const Bar&)' is ambiguous
Может кто-нибудь прокомментировать обоснование этого правила в стандарте?