Gần đây tôi có vấn đề với mã như thế này:Tại sao trình biên dịch không thể suy ra tham số mẫu tự động trừ khi tôi thêm const?
constexpr auto lambda = []{};
template<auto& l>
struct Lambda {};
template<auto& l>
void test(Lambda<l>) {}
int main() {
test(Lambda<lambda>{});
}
Cả kêu vang và GCC nói rằng nó không thể suy ra l
.
Tuy nhiên, nếu tôi thêm const có:
// ----v
template<const auto& l>
void test(Lambda<l>) {}
Sau đó, mọi thứ hoạt động với kêu vang. GCC vẫn không thành công. Điều gì đang xảy ra ở đây? Liệu nó có thể không tự mình suy ra số const
? Đây có phải là lỗi GCC để nó không khấu trừ l
trong cả hai trường hợp không?