On Saturday, 7 November 2020 at 20:43:04 UTC, Ben Jones wrote:
I'm trying to write a function template with 1 parameter whose type is inferred, but with the other parameters variadic.

Basically, I want to do this:

auto f(Ts..., Inferred)(Inferred inf){}

and call it with f!(X,Y,Z)(w) //inferred will be typeof(w), Ts... == (X, Y, Z)

which I can't do because the variadic template args have to come last.

Is there a way to change f so that the caller can use it like I want? I tried this approach which didn't work.

template f(Ts...){
  auto f(Inferred)(Inferred inf){}
}

I don't see a way to specify a variadic set of template args but have one inferred. I could wrap the variadic args in another template so f just takes 2 params, but I'd like to avoid that because it makes the calling code more complicated.

template f(Ts...) {
    auto f(Inferred)(Inferred inf) {
        pragma(msg, Ts);
        import std.stdio : writeln;
        inf.writeln;
    }
}

void main() {
    f!(int, float, char)("Hello, world!");
}

https://run.dlang.io/is/e8FGrF

Reply via email to