Итак, в основном этот код:
class A {
};
class B { 
   B (const B& b) {}
public: 
   B (){}
   B (const A& a) {} 
};
int main()
{
   A a;
   B b1(a);  //OK
   B b2 = a; //Error
}
генерирует ошибку только для B b2 = a. И эта ошибка
error: 'B:: B (const B &) является закрытым
Почему он пытается вызвать конструктор копирования в дополнение к конструктору прямого преобразования?
Из сообщения об ошибке видно, что создан временный B, который затем используется для копирования-построения, но почему? Где это в стандарте?