variadic templates and out/inout

Kirk McDonald kirklin.mcdonald at gmail.com
Mon Dec 18 22:42:06 PST 2006


Tyro wrote:
> The following compiles without any errors or warning. However it
> fails if line 12 is uncommented (error messages provided below). Is
> there a compelling reason why this should not work? If not, what
> are the possibilities of getting this implemented?
> 
> void get(A...)(inout A a)
> {
>   foreach(inout t; a)
>   {
>     if(typeid(typeof(t)) is typeid(double))
>       t = 0.0;
>   }
> }
> 
> void main()
> {
>   double d;
>   //get(d); // fails
> }
> 
> 
> /+
> Error messages:
> 
> io.d(3): no storage class for t
> io.d(12): template instance io.get!(double) error instantiating
> +/
> 
> ------------
> Andrew Edwards

There is no particular reason why this shouldn't work. However, there is 
a very simple workaround. Re-write 'get' like this:

void get(A...)(inout A a)
{
   foreach(i, t; a)
   {
     if(typeid(typeof(t)) is typeid(double))
       a[i] = 0.0;
   }
}

-- 
Kirk McDonald
Pyd: Wrapping Python with D
http://pyd.dsource.org



More information about the Digitalmars-d mailing list