Spec-Zone.ru › C++

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

Определён в заголовочном файле <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}; // guide #1 deduces function<int(double)>
  int i = 5;
  std::function g = [&](double) { return i; }; // guide #2 deduces function<int(double)>
}

Отчёты об ошибках

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

Отчёт об ошибке Применён к Поведение согласно опубликованной версии Корректное поведение
LWG 3238 C++17 поведение (2) было неясным, когда
F::operator() имеет квалификатор &&
уточнено, что она исключается из разрешения перегрузки

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/utility/functional/function/deduction_guides

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API