This page is a snapshot from the LWG issues list, see the Library Active Issues List for more information and the meaning of C++23 status.

3771. [fund.ts.v3] remove binders typedefs from function

Section: 7.2.1 [fund.ts.v3::func.wrap.func.overview] Status: C++23 Submitter: Alisdair Meredith Opened: 2022-09-12 Last modified: 2023-11-22

Priority: Not Prioritized

View all issues with C++23 status.

Discussion:

Addresses: fund.ts.v3

The LFTSv3 bases its specification for experimental::function on std::function in the C++20 standard. However, the wording was largely copied over from LFTSv2 which based its wording on the C++14 standard.

For C++17, we removed the conditionally defined typedefs for the legacy binders API, but this removal was not reflected in the TS. We are now left with a specification referring to unknown types, T1 and T2.

These typedefs should be excised to match the referenced standard.

[2022-09-23; Reflector poll]

Set status to Tentatively Ready after ten votes in favour during reflector poll.

[2022-11-12 Approved at November 2022 meeting in Kona. Status changed: Voting → WP.]

Proposed resolution:

This wording is relative to N4920.

  1. Modify the synopsis in 7.2.1 [fund.ts.v3::func.wrap.func.overview] as indicated:

    namespace std {
      namespace experimental::inline fundamentals_v3 {
    
        template<class> class function; // undefined
    
        template<class R, class... ArgTypes>
        class function<R(ArgTypes...)> {
        public:
          using result_type = R;
          using argument_type = T1;
          using first_argument_type T1;
          using second_argument_type = T2;
    
          using allocator_type = erased_type;
    
          // ...
      }
    }