This is the well-known variadic forwarding issue. A minimal example of your situation is:
struct Foo<T> {
var base: T
}
extension Foo: ExpressibleByArrayLiteral where T: ExpressibleByArrayLiteral {
init(arrayLiteral elements: T.ArrayLiteralElement...) {
// Cannot invoke 'init' with an argument list of type '(arrayLiteral: [T.ArrayLiteralElement])'
base = T.init(arrayLiteral: elements)
}
}
Here are some previous threads about the topic:
• [Idea] Passing an Array to Variadic Functions (55 comments, April 2016)
• [Discussion] Variadics as an Attribute (7 comments, February 2017)
• Explicit array splat for variadic functions (29 comments, March 2018)
• Variadic Parameters that Accept Array Inputs (52 comments, May 2018)
• Another attempt at passing arrays as varargs (with implementation) (126 comments, July 2019)
• Yet another varargs “splat” proposal (9 comments, September 2019)