最新草案第 8.5.3/5 段中的要点 (5.2.2.1) 中的 "user-defined conversions are not considered" 是什么意思?

What does the Standard mean by "user-defined conversions are not considered", in bullet point (5.2.2.1) in paragraph §8.5.3/5 of the latest draft?

§8.5.3[dcl.init.ref]/5 要点 (5.2.2.1):

重点是我的

If T1 or T2 is a class type and T1 is not reference-related to T2, user-defined conversions are considered using the rules for copy-initialization of an object of type “cv1 T1” by userdefined conversion (8.5, 13.3.1.4, 13.3.1.5); the program is ill-formed if the corresponding non-reference copy-initialization would be ill-formed. The result of the call to the conversion function, as described for the non-reference copy-initialization, is then used to direct-initialize the reference. For this direct-initialization, user-defined conversions are not considered.

这是标准的附录,用于解决通过 class 与 user-defined 转换的间接引用绑定丢弃 cv-qualifiers 的问题。

相关缺陷是 1571

给出的例子是这样的:

class A {
public:
  operator volatile int &();
};
A a;

const int & ir1a = a.operator volatile int&(); // error!
const int & ir2a = a; // allowed! ir = a.operator volatile int&();

第一个引用初始化无效,因为它从初始化表达式中丢弃了 cv-qualifiers。但是,在旧规则下,第二个是有效的,因为只考虑转换对象上的 cv-qualifiers,而不考虑转换运算符返回的引用。

我认为您的困惑来自于两种可能的转换。 User-defined 转换被认为是看它们是否可以 copy-initialize 一个 cv1 T1 的 non-reference,然后那个转换的结果用于 direct-initialize 参考,为此user-defined 不考虑转化。