#include <iostream>
struct type1 {
type1() {};
};
struct type2 {
type2( const type1& ) {};
};
struct sss {
sss( type2 ) {
std::cout << "type2" << std::endl;
};
};
int main() {
type1 x;
sss xxx = x; // <- тут выдается ошибка в gcc
return 0;
}
Поясню что тут должно произойти: класс sss должен конструироваться из класса type2, который, в свою очередь, неявно получается из type1. В компиляторе от Microsoft все так и работает.
Кстати, если писать явно sss xxx( x );,то работает и в gcc.
P.S. Ответ разработчиков gcc был следующим: Only a single user-defined conversion is allowed in an implicit conversion sequence, but the copy-initialization would require two.
Что в переводе означает только то, что та форма инициализации, которая вызывает ошибку, требует два неявных преобразования, а это запрещено.
Остается неясным почему это запрещено(пока не нашел в стандарте) и, если это так и есть, то почему компилятор от Microsoft не выдает ошибку?..