Я провел несколько тестов и столкнулся с этим странным поведением.
struct A{};
struct B : A{};
#include <iostream>
template<class T>
void fn2(T const &){
}
void fn2(A const &){
std::cout << "Here\n";
}
template<class T>
void fn1(){
T a;
fn2(a);
}
int main(){
fn1<B>();
}
Я очистил код.При запуске, я ожидаю, что он печатает «здесь».Однако это называется шаблонной версией fn2()
.
Я тоже тестировал в Godbolt.Там я переписал функции fn1()
и fn2()
, поэтому они возвращают int
.В этот момент компилятор поступил правильно.
Вот как я компилирую:
$ gcc -Wall -Wextra -Wpedantic bug.cc -lstdc++
$ ./a.out
$ clang -Wall -Wextra -Wpedantic bug.cc -lstdc++
$ ./a.out
$