下のように相互にキャストできるようにしたいのですが、

class A a;
class B b;
a = b;
b = a;

下のように定義するとコンパイルが通りません。

class A
{
public:
operator B ()
{
return B(A)
}
}

class B
{
public:
operator A ()
{
return A(B)
}
}

なにか良い方法はないでしょうか。