Реальным примером является std::swap
, который является назначенной точкой настройки. Означает ли это, что с C ++ 20 мы можем написать std::swap(a, b)
напрямую вместо использования std::swap; swap(a, b);
?
Нет. std::swap
сама не получила никаких способностей. Это все еще просто шаблон функции, поэтому, если вы вызываете его напрямую, вы ... вызываете его напрямую. Никаких ADL или чего-либо еще.
Смысл этого в том, чтобы сказать , как следует выбирать точек настройки. То есть вы пишете:
namespace N { // not std
void swap(Foo&, Foo&);
}
Не:
namespace std {
void swap(N::Foo&, N::Foo&);
}
Ни:
namespace std {
template <>
void swap(N::Foo&, N::Foo&);
}
Тем не менее, в C ++ 20 есть много новых вещей, называемых объектами точек настройки , которые вы можете использовать напрямую, чтобы делать подобные вещи. CPO для swap
пишется std::ranges::swap
(и также есть CPO для всех полезных диапазонов вещей ... ranges::begin
, ranges::end
, et c.).