C ++ 20 อนุญาตให้ใช้auto
สำหรับประเภทพารามิเตอร์ฟังก์ชัน
มันยังอนุญาตให้ใช้auto
เป็นตัวยึดอาร์กิวเมนต์เทมเพลต (ไม่เหมือนกัน แต่ในจิตวิญญาณของเทมเพลต C ++ 17 <auto>ในทางใดทางหนึ่ง) สำหรับประเภทพารามิเตอร์ฟังก์ชันหรือไม่
ดังนั้นรหัสต่อไปนี้ก่อน C ++ 20:
template<typename First, typename Second>
void printPair(const std::pair<First, Second>& p) {
std::cout << p.first << ", " << p.second;
}
สามารถเขียนเป็น:
void printPair(const std::pair<auto, auto>& p) {
std::cout << p.first << ", " << p.second;
}
มันรวบรวมและทำงานได้ดีกับการใช้ GCC เชิงทดลองสำหรับแนวคิด
มันเป็นไวยากรณ์ที่ถูกต้องกับ C ++ 20 หรือไม่?
auto
อนุญาตใน[](const std::pair<auto, auto>& p){}
(ไม่ว่าจะมี-std=c++2a
หรือ-std=c++17
)
auto
โดยตรงเป็น templatisedtypename XYZ
ซึ่งจะบ่งบอกว่ามันเป็นไวยากรณ์ที่ถูกต้อง เรียบร้อย