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

4425. CTAD function_ref of data member pointer should produce noexcept signature

Section: 22.10.17.6.5 [func.wrap.ref.deduct] Status: Tentatively Ready Submitter: Tomasz Kamiński Opened: 2025-10-20 Last modified: 2025-10-21

Priority: Not Prioritized

View all issues with Tentatively Ready status.

Discussion:

Addresses PL-005.

For data member pointer M C::* dmp, template argument deduction in form std::function_ref fr(std::nontype<dmp>, x) results in std::function_ref<M&()>, that returns a reference to designated member. As accessing a data member can never throw exception and function_ref support noexcept qualifed function types, the deduction guide should be updated to produce noexcept-qualified signature.

[2025-10-21; Reflector poll.]

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

Proposed resolution:

This wording is relative to N5014.

  1. Modify 22.10.17.6.5 [func.wrap.ref.deduct] as indicated:

    template<class F>
    function_ref(nontype_t<f>, T&&) -> function_ref<see below>;
    

    Let F be decltype(f).

    -6- Constraint:

    1. (6.1) — F is of the form R(G::*)(A...) cv &opt noexcept(E) for type G, or
    2. (6.2) — F is of the form M G::* for type G and object type M, in which case let R be invoke_result_t<F, T&>, A... be an empty pack, and E be false true, or
    3. (6.3) — F is of the form R(*)(G, A...) noexcept(E) for type G.

    -7- Remarks: The deduced type is function_ref<R(A...) noexcept(E)>.