Рассмотрим следующий пример (godbolt):
#include <iostream>
template <typename T>
const T *as_const(T *p) { return p; }
void f() {}
template <typename T>
void g(T *) { std::cout << "A"; }
template <typename T>
void g(const T *) { std::cout << "B"; }
int main() {
g(as_const(&f));
}
Как GCC, так и Clang могут скомпилировать его, но полученные в результате исполняемые файлы производят другой вывод: версия, скомпилированная с GCC-отпечатками A
и скомпилированная с помощью Clang-распечаток B
Не могли бы вы объяснить эту разницу?
Обновление: как указано в @VTT, наблюдается такая же разница, даже если as_const
отбрасывается.