typedef-ed ref-qualified 函数类型在 gcc 和 clang 之间的行为不同

vbs*_*stb 7 c++ member-function-pointers language-lawyer

当我尝试编译以下代码时:

struct A {
    void foo() & {
    }
};

int main()
{
    using F = void() &; // or 'typedef void F() &;'
    [[maybe_unused]] F A::*pf = &A::foo;
}
Run Code Online (Sandbox Code Playgroud)

使用 clang 可以编译,但是使用 gcc 编译时会产生错误。

test.cc:9:37: error: cannot convert ‘void (A::*)() &’ to ‘void (A::*)()’ in initialization
    9 |     [[maybe_unused]] F A::*pf = &A::foo;
Run Code Online (Sandbox Code Playgroud)

哪种行为是正确的?