auto x = b.getX();
a.write(x);
とした時にxの型が一目で確認できないというなら
a.write(b.getX());
だって一目で確認できないから同じでしょ?
って話じゃないの?

後者はa.write()の引数の型から分かるってこともあるけど
a.writeがオーバーロード持ってたら?とか
a.writeがtemplate<F>を引数に取るとしたら?とか
考えると、前者と後者には確かに大した差はない。