为什么派生类返回类型的显式转换函数不是直接初始化上下文中的候选函数

jac*_*k X 9 c++ language-lawyer overload-resolution

给出以下示例:

#include <iostream>
struct A{
    A() = default;
    A(A const&){}
};
struct B:A{};
struct C{
    explicit operator B(){
        return B{};
    }
};

int main(){
   C c;
   A a(c);  // #1
}
Run Code Online (Sandbox Code Playgroud)

GCCClang两个报告c都不能转换为const A&. 但是,标准中有一条相关规则说,explicit operator B()在这种情况下应该是候选函数。即:
over.match.copy#1.2

当初始化一个临时绑定到构造函数的第一个参数时,该参数的类型是“对可能有 cv 限定的 T 的引用”,并且在直接初始化类型对象的上下文中使用单个参数调用构造函数时“cv2 T”,也考虑了显式转换函数。那些没有隐藏在 S 中并且产生其 cv 非限定版本与 T 类型相同的类型或其派生类的类型是候选函数

而且,在现行标准中,相关规则的含义仍然相同:
over.match.copy#1.2

当初始化表达式的类型是类类型“cv S”时,考虑转换函数。非显式转换函数的允许类型是T 和从 T 派生的任何类初始化临时对象 ([class.mem]) 以绑定到构造函数的第一个参数时,其中该参数的类型为“对 cv2 T 的引用”,并且在直接初始化的上下文中使用单个参数调用构造函数对于“cv3 T”类型的对象,显式转换函数的允许类型是相同的;否则没有。

无论是c++17标准还是现行标准,都说在likes上下文中#1,返回类型为classT或派生自任何类的显式转换函数T也是候选。

在我的例子中,atype的对象A由单个初始化器直接初始化c,它是构造函数调用中的单个参数, 的复制构造函数A有一个参数A const&。在这种情况下,c应该使用初始化一个临时对象来绑定到第一个参数。因此,在这种情况下,explicit operator B()应将其视为候选函数。然而,GCCClang这两种拒绝这个实例。 GCC显然报告一个没有意义的诊断信息。
这是这些编译器的错误吗?或者,我误会了什么?