Niedawno miałem problem z kodu:Dlaczego kompilator nie może wydedukować parametru automatycznego szablonu, chyba że dodaję const?
constexpr auto lambda = []{};
template<auto& l>
struct Lambda {};
template<auto& l>
void test(Lambda<l>) {}
int main() {
test(Lambda<lambda>{});
}
Zarówno szczęk i GCC mówi, że nie można wywnioskować l
.
Jednakże, jeśli dodam const tam:
// ----v
template<const auto& l>
void test(Lambda<l>) {}
Potem wszystko działa z brzękiem. GCC wciąż nie działa. Co tu się dzieje? Czy to nie może wydedukować samego siebie? Czy jest to błąd GCC, aby nie wyprowadzać w obu przypadkach l
?