c ++ 11 — явный конструктор c ++, вызываемый в неявной ситуации

Я скомпилировал код ниже, используя 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 ++?

4

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector