Namespaces
Variants

deduction guides for std::function

From cppreference.net
Utilities library
Function objects
Function invocation
(C++17) (C++23)
Identity function object
(C++20)
Old binders and adaptors
( until C++17* )
( until C++17* )
( until C++17* )
( until C++17* )
( until C++17* ) ( until C++17* ) ( until C++17* ) ( until C++17* )
( until C++20* )
( until C++20* )
( until C++17* ) ( until C++17* )
( until C++17* ) ( until C++17* )

( until C++17* )
( until C++17* ) ( until C++17* ) ( until C++17* ) ( until C++17* )
( until C++20* )
( until 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) Этот deduction guide предоставляется для std::function чтобы разрешить выведение из функций.
2) Эта перегрузка участвует в разрешении перегрузки только если & F :: operator ( ) является корректно сформированным при рассмотрении как невычисляемый операнд и decltype ( & F :: operator ( ) ) имеет форму R ( G :: * ) ( A... ) (опционально cv-квалифицированный, опционально noexcept, опционально с lvalue reference квалификатором). Выведенный тип является 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 ( ) имеет квалификатор &&
уточнено, что исключается из разрешения перегрузки