I fully agree with @PoignardAzur. The idea is to support a use-case Using `impl Trait` for monomorphized heterogenous collections
I understand part of bad track record is that C++ yields post-monomorphisation errors. E.g. errors that show up after a template has been instantiated. Rust has so far avoided such errors and hopefully would avoid them with ...T
as well.
BTW post-monomorphisation errors is exactly where macros are worse than special language features like the one proposed here. Yes macros can do a lot of similar things but error messages would be less clear.
I think
fn make_tuple_sing<T> (t: (T)) where T : Sing
syntax doesn't express this intent as clearly as either of
fn make_tuple_sing<(T)> (t: (T)) where T : Sing // hmm.. doesn't (T) mean something already?..
fn make_tuple_sing<...T> (t: ...T) where T : Sing
fn make_tuple_sing<...T> (...t: ...T) where T : Sing
To me this is exactly the "a separate C++-like parameter pack ... syntax". These are templates akin to macros and akin to C++ but hopefully with much better error reporting and overall nicer to use. The only thing we're bike-shedding here is what exactly this syntax might look like.