Похоже, вы, возможно, нашли причуду компилятора:)
Если вы измените версию компилятора на любую версию, отличную от LLVM 3.0, то вы получите int3 & 4.
Это напечатает int3 & 4 на LLVm 3.0так что, похоже, это связано с тем, что B (3) является временным объектом:
class B
{
public:
explicit B(int i)
{
std::cout<<"int"<<i;
}
B(const B& rhs, int i = 0)
{
std::cout<<"&"<<i;
}
};
int main(int, char**)
{
B a(3);
B b(a, 4);
}