私としては。
昨日書いた件について、悪いのは演算子のオーバーロードではなく、
- foo という名前が一つの文に二度出ているのにエラーにならない*1
- 関数呼び出しと変数宣言(定義)の文法が区別しにくい
- template のための括弧が、あらゆる文脈で登場しうる不等号である
の3点だと考えている。
そして、演算子のオーバーロードは上記に点に起因する問題をより深刻にしているだけで、原因そのものではない。様に思う。
#というのも。私は演算子のオーバーロードが大好きだからだ。だから、java は好きになれない。
というわけで。
演算子のオーバーロードのない C言語でも、1度目と2度目で意味が異なるようにすることはできる:
typedef int (foo)( void * ); void test() { foo( * foo ); /* 変数宣言。*/ foo( * foo ); /* 関数呼び出し。即死する。 */ }
foo(foo); で十分なはずなんだが、なぜか foo(foo); だと、micorsoftコンパイラはエラーにする。エラーじゃないと思うんだが。
#写真と本文は関係ありません。