Зачем шаблону tag_invoke вообще нужен Niebloid std::tag_invoke?C++

Программы на C++. Форум разработчиков
Anonymous
Зачем шаблону tag_invoke вообще нужен Niebloid std::tag_invoke?

Сообщение Anonymous »

Этот вопрос предполагает знакомство с методом управления точками настройки tag_invoke, представленным в P1895R0.
Объект точки настройки может быть определен в соответствии с P1895R0 как:

Код: Выделить всё

inline constexpr struct foo_cpo {
// simplified original by omitting noexcept forward and using auto arg
auto operator()(auto const &x) -> decltype( std::tag_invoke(*this, x) ) {
return std::tag_invoke(*this, x); //  decltype( tag_invoke(*this, x) ) {
return tag_invoke(*this, x); // no Niebloid. directly ADL call tag_invoke
}
} foo;
Например, пример стирания типа из P1895R0, то есть https://godbolt.org/z/3TvO4f, можно переопределить вообще без использования Niebloid: https://godbolt .org/z/n3hsqMxs7. Код дословно аналогичен исходному, с учетом определения Niebloid std::tag_invoke и использования приведенной выше формы ADL для всех объектов точек настройки.
Что такое требование, чтобы наличие Niebloid действительно удовлетворяло для tag_invoke?

Подробнее здесь: https://stackoverflow.com/questions/638 ... oke-at-all

Вернуться в «C++»