Namespaces
Variants

deduction guides for std::function

на 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 R, class... ArgTypes >
function( R(*)(ArgTypes...) ) -> function<R(ArgTypes...)>;
(1) (начиная с C++17)
template< class F >
function( F ) -> function</*see below*/>;
(2) (начиная с C++17)
template< class F >
function( F ) -> function</*see below*/>;
(3) (начиная с C++23)
template< class F >
function( F ) -> function</*see below*/>;
(4) (начиная с C++23)
1) Это руководство по выводу типов предоставлено для std::function для обеспечения вывода из функций.
2) Эта перегрузка участвует в разрешении перегрузки только если &F::operator() является корректным при рассмотрении как невычисляемый операнд и decltype(&F::operator()) имеет форму R(G::*)(A...) (необязательно cv-квалифицированный, необязательно noexcept, необязательно квалифицированный как lvalue-ссылка). Выведенный тип — std::function<R(A...)>.
3) Эта перегрузка участвует в разрешении перегрузки только если &F::operator() является корректным при рассмотрении как невычисляемый операнд и F::operator() является функцией с явным объектным параметром, чей тип имеет форму R(G, A...) или R(G, A...) noexcept. Выведенный тип — std::function<R(A...)>.
4) Эта перегрузка участвует в разрешении перегрузки только если &F::operator() является корректным при рассмотрении как невычисляемый операнд и F::operator() является статической функцией-элементом, чей тип имеет форму R(A...) или R(A...) noexcept. Выведенный тип — std::function<R(A...)>.

Примечания

Эти направляющие вывода не позволяют выводить тип из функции с параметром-многоточием , и ... в типах всегда трактуется как развертывание пакета .

Тип, выводимый этими руководствами по выводу, может измениться в последующей редакции стандарта (в частности, это может произойти, если noexcept поддержка будет добавлена в std::function в более позднем стандарте).

Пример

#include <functional>
int func(double) { return 0; }
int main() {
  std::function f{func}; // руководство #1 выводит function<int(double)>
  int i = 5;
  std::function g = [&](double) { return i; }; // руководство #2 выводит function<int(double)>
}

Отчеты о дефектах

Следующие отчеты об изменениях поведения, влияющие на дефекты, были применены ретроактивно к ранее опубликованным стандартам C++.

DR Applied to Behavior as published Correct behavior
LWG 3238 C++17 поведение (2) было неясным, когда
F :: operator ( ) имеет квалификатор &&
уточнено, что исключается из разрешения перегрузки