// 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: i64; } impl Show(i64) for IntBox { get :: (self: *IntBox) -> i64 => self.v; } Naked :: struct { x: i64; } // intentionally NOT `impl Show` howmany :: (..xs: Show) -> i64 { return xs.len; } main :: () -> i32 { a := IntBox.{ v = 1 }; n := Naked.{ x = 2 }; print("{}\n", howmany(a, n)); // `n` does not conform to Show 0 }