无法转换初始化列表的第二个参数

时间:2014-11-25 04:46:01

标签: c++

标准说:( N3797::13.3.3.1/4 [over.best.ics]

  

但是,在考虑构造函数的参数时   用户定义的转换函数,它是13.3.1.3时的候选者   在第二步中调用临时复制/移动   通过初始化程序时,通过13.3.1.7进行类复制初始化   列表作为单个参数或初始化列表只有一个   元素和转换到某个类X或引用(可能   cv-qualified)X 被认为是构造函数的第一个参数   X,[...]仅考虑标准转换序列和省略号转换序列。

我们只关注以下情况中的第一个论点:

#include <iostream>

struct B;

struct C
{
    C(){ }
    C(const B&){ }
};

struct B
{ 
    B(){ }
    B(const C&){ }
};

struct A
{
    A(const C&, const C&){ }
    A(const B&){ }
};

B b;
C c;
A a{b, b};


int main(){ }

DEMO

虽然我提供b作为第一个参数,但不应用用户定义的转化B-->C,但它有效。

1 个答案:

答案 0 :(得分:0)

您有从BA的转换以及从CB的转换,但您正在尝试构建A来自{B,C}并且没有该表单的构造函数。 。

但是现在你完全把它归好了。 :)

相关问题