暗黙の型変換

いつものことながら Scala すごいなー。
C++ でも型 A に 型 B を引数によるコンストラクタが定義されていると暗黙に B=>A の変換が発生したり、演算子オーバーロードで暗黙の変換が発生したりするけど、Scala のはひとあじ違う感じがする。
しかし、C++ のキャスト演算子の多重定義の文法はどうにかならなかったのかな。前置、後置のインクリメント/デクリメントもひどいと思うけど。

class Foo {
public:
    Foo(int m) : n(m) { }

    // cast to int
    operator int() const { return n; }

    // post increment
    Foo operator++(int) { Foo f(n); n++; return f; }

    // pre increment
    Foo& operator++() { n++; return *this; }
private:
    int n;
};