3824. Number of bind placeholders is underspecified

Section: 22.10.15.5 [func.bind.place] Status: C++23 Submitter: Tomasz KamiƄski Opened: 2022-11-09 Last modified: 2023-11-22

Priority: Not Prioritized

View all other issues in [func.bind.place].

View all issues with C++23 status.

Discussion:

This is resolution of GB-95 (22.10.15.5 [func.bind.place] Number of bind placeholders is underspecified).

22.10.2 [functional.syn] and 22.10.15.5 [func.bind.place] both contain a comment that says "M is the implementation-defined number of placeholders". There is no wording anywhere to say that there is any such number, only that comment.

[Kona 2022-11-09; Move to Immediate]

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

Proposed resolution:

This wording is relative to N4917.

  1. Modify 22.10.15.5 [func.bind.place] as indicated:

    namespace std::placeholders {
      // M is the implementation-defined number of placeholders
      see below _1;
      see below _2;
                  .
                  .
                  .
      see below _M;
    }
    

    -?- The number M of placeholders is implementation-defined.

    -1- All placeholder types meet the Cpp17DefaultConstructible and Cpp17CopyConstructible requirements, and their default constructors and copy/move constructors are constexpr functions that do not throw exceptions. It is implementation-defined whether placeholder types meet the Cpp17CopyAssignable requirements, but if so, their copy assignment operators are constexpr functions that do not throw exceptions.