Microsoft .NET Framework 1.0a SDK (フリーで手に入るやつ)では
コンパイルが通り、期待した通りの結果が返ってくるのですが、
統合環境の(?) .NET 2003 ではコンパイルがとおりません。以下のプログラムです。

class Output {
public static Output operator << (Output cout , System.Object obj) {
System.Console.WriteLine(obj.ToString());
return cout;
}
}

class Test {
static void Main() {
Output cout = new Output();
cout <<= "ほげ";
}
}

<<エラーメッセージ>>
オーバーロードされた shift 演算子では、最初のオペランドは
それを含む型で、二番目のオペランドの型は int でなければなりません。


なぜに、このような制約が生まれたのでしょうか?
同じ動作のプログラムを .NET 2003 では実現するのは不可能なのですか?