Я думал, что смысл tag_invoke в том, что вы можете настройте some::cpo для вашего типа Foo, перегрузив tag_invoke(decltype(some::cpo), Foo const&); template auto Cpo::operator(T&& arg) будет реализован как неквалифицированный вызов tag_invoke(some::cpo, arg), поэтому вызов найдет ваш< /em> перегрузка tag_invoke через ADL, что приводит к маршрутизации cpo(Foo{}) на tag_invoke(decltype(some::cpo), Foo const&).Но тогда как это возможно через std::tag_invoke объект? Я не вижу, чтобы это было определено в P1895R0.
Это действительно что-то вроде этого?
Код: Выделить всё
namespace std {
inline constexpr struct TagInvoke {
inline constexpr decltype(auto) operator()(auto&& ...args) const {
return tag_invoke(std::forward(args)...);
}
} tag_invoke;
Я что-то упустил?
Подробнее здесь: https://stackoverflow.com/questions/786 ... rds-all-ar