隐式情况下调用的c ++显式构造函数

时间:2017-09-15 18:29:01

标签: c++ c++11 g++ clang++ explicit-constructor

我使用g ++ 6.3.0编译了下面的代码,使用-std = c ++ 14选项。

#include <utility>
#include <iostream>
struct A{
    int x;
    A(const A&)=default;
    A(int x):x(x){}
};

struct B{
  A a;
  template<class... Args>
  B(Args&&... args):a(std::forward<Args>(args)...){
    std::cout<<"1!"<<std::endl;
  }

  explicit B(const A& a):a(a){std::cout<<"2!"<<std::endl;}
};
struct C:B{
  using B::B;
};
int main(){
    A a{2};
    const A& aref=a;
    C c=aref; //Implicit conversion
}

我希望它输出“1!”因为转换是隐式的,但它输出“2!”。如果我注释掉模板构造函数,它将无法编译。这是正确的行为,还是某种g ++错误?

0 个答案:

没有答案