テストケース: 空の境界
境界の仕組みによる帰結として、trait が何の機能も 含んでいない場合でも、それを境界として使用できます。Eq と Copy は、std ライブラリに含まれるそのような trait の例です。
struct Cardinal; struct BlueJay; struct Turkey; trait Red {} trait Blue {} impl Red for Cardinal {} impl Blue for BlueJay {} // これらの関数は、これらのトレイトを実装している型に対してのみ // 有効です。トレイトが空であるという事実は関係ありません。 fn red<T: Red>(_: &T) -> &'static str { "赤" } fn blue<T: Blue>(_: &T) -> &'static str { "青" } fn main() { let cardinal = Cardinal; let blue_jay = BlueJay; let _turkey = Turkey; // 境界があるため、`red()` はアオカケスには機能せず、 // その逆も同様です。 println!("ショウジョウコウカンチョウは{}です", red(&cardinal)); println!("アオカケスは{}です", blue(&blue_jay)); //println!("七面鳥は{}です", red(&_turkey)); // ^ TODO: この行のコメントを解除してみてください。 }