C ++ 20 cho phép sử dụng auto
cho loại tham số chức năng.
Có phải nó cũng cho phép sử dụng auto
như một trình giữ chỗ đối số mẫu (không tương tự, nhưng theo tinh thần của mẫu C ++ 17 <auto> theo cách nào) cho loại tham số chức năng?
Vì vậy, đoạn mã sau, tiền C ++ 20:
template<typename First, typename Second>
void printPair(const std::pair<First, Second>& p) {
std::cout << p.first << ", " << p.second;
}
Có thể được viết là:
void printPair(const std::pair<auto, auto>& p) {
std::cout << p.first << ", " << p.second;
}
Nó biên dịch và hoạt động độc đáo với triển khai GCC thử nghiệm cho các khái niệm.
Đây có phải là một cú pháp hợp pháp với C ++ 20?
auto
được phép vào [](const std::pair<auto, auto>& p){}
hay không (cho dù có -std=c++2a
hoặc -std=c++17
).
auto
trực tiếp chuyển thành templatisedtypename XYZ
, điều này sẽ ngụ ý mạnh mẽ rằng đó là cú pháp hợp pháp. Gọn gàng .