What does this generate?auto foo(auto ref S a, auto ref S b, auto ref S c, auto ref S d) { ... }16 different functions, one for each combination? Sounds like a bad idea.
In my opinion, this should produce only two functions: #1: auto foo(ref S a, ref S b, ref S c, ref S d) { ... } #2: auto foo(S a, S b, S c, S d) { ... }