template<typename T>
concept SmallVar = (sizeof(T) <= sizeof(int));
void print(SmallVar auto t) {
std::cout << t << std::endl;
}
void print(const auto& t) {
std::cout << t << std::endl;
}
int main() {
print(6); // clang accepts, gcc sees here ambiguity
}
https://godbolt.org/z/P89dPsaKa
It seems that gcc is right in rejecting the code on ambiguity, as the function parameters that positionally correspond between the two templates are not of the same type - thus neither template should be more specialized than the other.
https://eel.is/c++draft/temp.func.order#6.2.2:
Otherwise, [...] or if the function parameters that positionally correspond between the two templates are not of the same type, neither template is more specialized than the other.