// Feature 1 — a pack argument that doesn't conform to the constraint protocol // is a per-position error. `Naked` has no `impl Show`, so passing it to a // `..xs: Show` pack is rejected (pointing at the offending argument). #import "modules/std.sx"; Show :: protocol(T: Type) { get :: (self: *Self) -> T; } IntBox :: struct { v: s64; } impl Show(s64) for IntBox { get :: (self: *IntBox) -> s64 => self.v; } Naked :: struct { x: s64; } // intentionally NOT `impl Show` howmany :: (..xs: Show) -> s64 { return xs.len; } main :: () -> s32 { a := IntBox.{ v = 1 }; n := Naked.{ x = 2 }; print("{}\n", howmany(a, n)); // `n` does not conform to Show 0; }