C c(B());
は
C c(B (*)());
という関数宣言に解釈される。
B b0;
C c(b0);
c.problem(b0);
とするとできましたが。
関数の引数のリファレンスの型にconstをつけて
"const B&b"、"const A&b"のようにすると
C c = C(B());
c.problem(B());
でもいけました。
なぜかは僕には分かりませんのでどなたか解説お願いします。
コンパイラはgcc4.2.1で確かめました。