This page is a snapshot from the LWG issues list, see the Library Active Issues List for more information and the meaning of New status.
Section: 22.10.4 [func.require] Status: New Submitter: Jiang An Opened: 2021-12-29 Last modified: 2022-01-15
Priority: 3
View all other issues in [func.require].
View all issues with New status.
Discussion:
There are two cases of the INVOKE operation specified with std::is_base_of_v (22.10.4 [func.require] (1.1), (1,4)), which means the following code snippet is ill-formed, as std::is_base_of_v<B, D> is false when either B or D is a union type.
union Foo { int x; }; static_assert(std::is_invocable_v<int Foo::*, Foo&>);
Currently libstdc++ accepts this code, because it uses slightly different conditions that handle union types. libc++ and MSVC STL reject this code as specified in 22.10.4 [func.require].
Should we change the conditions in 22.10.4 [func.require] (1.1) and (1.4) to match libstdc++ and correctly handle union types?[2022-01-30; Reflector poll]
Set priority to 3 after reflector poll.
Proposed resolution: