import morfa.type.traits; template < T > alias IsEdible = HasMember< T, "eat" >; template < T > if (IsEdible< T >) struct FoodBox { var food: T[]; } struct Carrot { func eat(): void {} } struct Car {} func main(): void { var carrotBox: FoodBox< Carrot >; // OK carrotBox.food ~= Carrot(); // Adds a carrot // var carBox: FoodBox< Car >; // Not allowed static assert( not trait(compiles, func() { var carBox: FoodBox< Car >; } )); }