不変条件を満たしていること自体は明らかなので、コメントで明示したうえで素直に書けばよい。個数や頻度をコードの危険性や品質の判定に使おうというムーヴメントがあり、これ自体はまあ真っ当なものである。でないかのように見せるというのはよろしくない。例と同等のコードは次のようにも書ける。マークも消されてしまったことで、本当に安全か確認することさえ大変になってしまった。暗黙に不変条件が設定されていて、それは確かに守られているな」と思える人はいないだろう。書けはするが検査するまでもなく安全とわかる箇所がそれなりに多い。数を減らすのではなく、人間による安全性の確認がしやすいような実装を心掛けるべきである。排したいのであれば、無駄な検査が行われるコストと引き換えに以下のように書くことはできる。本来不要な検査が行われる。万が一実装バグなどで不変条件が破れていても、未定義動作にならずクラッシュする。するなり自前実装するなりが簡単であるから、好きに実装すれば良い。実装できる対象がある。トレイトが実装されている。これらは長さ0の配列や文字列であるから、参照が指す値は特に有意義ということもない。定義しようというときにはこのトレイト実装自体が強力な道具となる。要求されていても問題なく使える万能の参照だからである。トレイトはどんな場合にでも実装できるわけではないから、本当に妥当なデフォルト値があってそれが正しく用いられているかは確認すべきである。同様になるので省略する。PartialOrd経験的に、これが一番面倒である。(最後に書くと楽とは言ってない)。いうか正直勘弁してほしいので、完全なコード例は諦めて概要とコード片だけで説明する。比較を独自に実装するとしても複数の方法がある。自然に作ればいずれもこの種類である。これは比較の際に大文字・小文字の違いを無視する文字列型である。比較され、その他の型との比較は許さない」などどのような比較を定義するかは本当に用途と設計次第なので、私からアドバイスできることは何もない。要求されている性質を満たすような実装にしましょう[11]とか、そんなところか。両方を実装したくなる場合が多い。このような実装はマクロである程度自動化できる。比較に丸投げしている。多くの場合、比較の左右オペランドを入れ替えても比較可能にしたいと思うことだろう。不可能というのはあまり素敵ではないし、実際遭遇すると割とフラストレーションが溜まる[12]。いう実装はさっさとマクロにするに限る。};}オペランド入れ替えの実装を楽にする例。比較を実装しようとすると、こうなる。str);オペランド入れ替えの実装を楽にする例。残念ながら完全ではない。不思議なことに、この比較というのがいくら実装しても後から足りないものが出てくるのである[13]。本当にやっていられないので、気付いてから足すくらいの気持ちで良い。使えない環境でも利用可能なはずである[14]。必要ない場合にどの環境でどこまで実装できるかを簡単に紹介する。