モダンな可変長引数はないのか

D言語での可変長引数は非常に昔ながらの方式、void*のポインタを引き回すことで実現されている。stdarg.dを見ると

typedef void* va_list;
template va_start(T) {
  void va_start(out va_list ap, inout T parmn) {
    ap = cast(va_list)(cast(void*)&parmn + 
     ((T.sizeof + int.sizeof - 1) & ~(int.sizeof - 1)));
  }
}
template va_arg(T) {
  T va_arg(inout va_list ap) {
    T arg = *cast(T*)ap;
    ap = cast(va_list)(cast(void*)ap + 
      ((T.sizeof + int.sizeof - 1) & ~(int.sizeof - 1)));
    return arg;
  }
}

となっていて、C/C++のstdargとほぼ同じ。融通は利くけど、あんまり美しくないよね。C#Javaみたいな、まっとうな配列に落とし込まれる可変長引数は導入されないのかな。