変更可能なセットが別のセットと正しく交差しない理由を見つけるのに少し時間を費やしました。
[someMutableSet intersectsSet:anotherSet]; // not the best idea
もちろん、正しい構文はであり、上記の行は別のことを意味します。これは型[someMutableSet intersectSet:anotherSet]
の戻り値を持つメソッド呼び出しです。BOOL
オプションを有効にしているので-Wall -Wextra
、これは警告としてキャッチされているはずです。しかし、それはキャッチされませんでした。私は試してさらに調査しましtypes
たNSMutableSet
。
(void)[types intersectsSet:types]; // -> no warning, this is expected
(BOOL)[types intersectsSet:types]; // (1) -> warning, this is expected
そして、繰り返しますが、これを行うと:
[types intersectsSet:types]; // (2) -> no warning, UNEXPECTED
- (BOOL)intersectsSet:(NSSet *)otherSet;
(1) と (2) が同等であると予想されるようにメソッドが定義されているとしても、警告はありません。悪質なコンパイル ツールは (1) を (2) よりも危険な性質のものと見なしているのかもしれませんが、なぜそれが警告に影響するのでしょうか?
では、(2) で (1) と同じ警告をコンパイラに生成させるにはどうすればよいでしょうか?