Namespaces
Variants

руководства по выводу для std::function_ref

Начиная с ru.cppreference.net
 
 
Библиотека утилит
Поддержка языка
Поддержка типов (базовые типы, RTTI)
Макросы тестирования возможностей библиотеки (C++20)
Программные утилиты
Функции с переменным числом аргументов
Поддержка корутин (C++20)
Поддержка контрактов (C++26)
Трёхстороннее сравнение
(C++20)
(C++20)(C++20)(C++20)    
(C++20)(C++20)(C++20)

Общие утилиты
Реляционные операторы (устарело в C++20)
 
Функциональные объекты
Вызов функции
(C++17)(C++23)
Тождественный функциональный объект
(C++20)
Старые binder'ы и адаптеры
(до C++17*)
(до C++17*)
(до C++17*)
(до C++17*)
(до C++17*)(до C++17*)(до C++17*)(до C++17*)
(до C++20*)
(до C++20*)
(до C++17*)(до C++17*)
(до C++17*)(до C++17*)

(до C++17*)
(до C++17*)(до C++17*)(до C++17*)(до C++17*)
(до C++20*)
(до C++20*)
 
 
Определён в заголовке <functional>
template< class F >
function_ref( F* ) -> function_ref<F>;
(1) (начиная с C++26)
template< auto f >
function_ref( std::nontype_t<f> ) -> function_ref</*see below*/>;
(2) (начиная с C++26)
template< auto f, class T >
function_ref( std::nontype_t<f>, T&& ) -> function_ref</*see below*/>;
(3) (начиная с C++26)
1) Эта перегрузка участвует в разрешении перегрузки только если std::is_function_v<F> является true.
2) Пусть тип F будет std::remove_pointer_t<decltype(f)>. Эта перегрузка участвует в разрешении перегрузки только если std::is_function_v<F> является true. Выведенный тип — std::function_ref<F>.
3) Пусть тип F будет decltype(f). Эта перегрузка участвует в разрешении перегрузки только если :
  • F имеет форму R(G::*)(A...) noexcept(E) (необязательно cv-квалифицированный, необязательно noexcept, необязательно квалифицирован по lvalue-ссылке) для типа G, или
  • F имеет форму M G::* для типа G и объектного типа M, в этом случае пусть R будет std::invoke_result_t<F, T&>, A... будет пустым пакетом, и E будет false, или
  • F имеет форму R(*)(G, A...) noexcept(E) для типа G.
Выведенный тип — std::function_ref<R(A...) noexcept(E)>.

Пример