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 참조 한정자 포함). 추론된 타입은 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 ( ) static member function 이고 그 타입이 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 적용 대상 게시된 동작 올바른 동작
LWG 3238 C++17 (2) 의 동작이
F :: operator ( ) 가 &&-qualified일 때 불명확했음
오버로드 해결에서 제외되도록 명확히 함