考虑这段代码:
struct S
{
template <typename T>
operator T() const
{ return {}; }
};
struct R
{
R() = default;
R(const R&) = default;
R(R&&) = default;
R(bool) {}
};
标准在哪里为以下行为定义了规则?
S s;
R r1 = s; // (1) passes: T = R
R r2(s); // (2) ambiguity: T = R or bool?
为什么(1)不会引起歧义问题(假设也R
可以由它初始化bool
)?我最近写了一个类似问题的答案,但我很好奇为什么(1)在这种情况下不像(2),我也不知道它在标准中的描述。