C ++ 20 позволяет использовать auto
для параметра типа функции.
Позволяет ли он также использовать auto
в качестве заполнителя аргумента шаблона (не похоже, но в духе C ++ 17 template <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
напрямую переводится в шаблонизированныйtypename XYZ
, что сильно подразумевает, что это законный синтаксис. Ухоженная .