Rvalue forwarding

H. S. Teoh hsteoh at quickfur.ath.cx
Thu Feb 23 07:52:40 PST 2012


On Thu, Feb 23, 2012 at 08:15:52AM +0100, Martin Nowak wrote:
> Is it possible to forward rvalues through variadic templates?
> Having to "move" the value for every layer is suboptimal.
> What am I doing wrong?
> 
> ----------
> 
> import std.algorithm : move;
> 
> void foo(Unique!Handle uniq)
> {
>     auto val = uniq.extract;
>     assert(val._fd == 1);
>     val.close();
> }
> 
> void foo(Unique!Handle uniq, string)
> {
>     auto val = uniq.extract;
>     assert(val._fd == 1);
>     val.close();
> }
> 
> version (none)
> {
>     void bar(Args...)(Args args)
>     {
>         foo(move(args)); // cannot forward variadic arguments ???
>     }
[...]

I'm not sure, but doesn't this only work if foo() is also variadic?
Otherwise I'm not sure how the compiler is supposed to determine, at
compile-time, which overload of foo to call from here. And what if args
contains 3 arguments, or arguments that don't match any overload of foo?

I suppose this *could* be handled by generating runtime code to decide
which foo to call, but from what I understand, D doesn't support this
currently.


T

-- 
Only boring people get bored. -- JM


More information about the Digitalmars-d mailing list