[Issue 1350] New: template, tuple or static foreach issue;	wrong values
    d-bugmail at puremagic.com 
    d-bugmail at puremagic.com
       
    Fri Jul 20 09:50:27 PDT 2007
    
    
  
http://d.puremagic.com/issues/show_bug.cgi?id=1350
           Summary: template, tuple or static foreach issue; wrong values
           Product: D
           Version: unspecified
          Platform: PC
        OS/Version: Windows
            Status: NEW
          Severity: normal
          Priority: P3
         Component: DMD
        AssignedTo: bugzilla at digitalmars.com
        ReportedBy: chris at dprogramming.com
Gives the wrong value for i and writefln prints out extra garbage.
version=BROKEN output:
foo
(char[],int)CALLBACK int = 0
bar
correct output, when version is not set to BROKEN:
foo
CALLBACK int = 333
bar
Code:
import std.stdarg, std.traits;
void Goat(Callbacks ...)(TypeInfo[] arguments, void* argptr)
{
        args_loop:
        foreach(argti; arguments)
        {
                version(BROKEN)
                {
                        foreach(Cb; Callbacks)
                        {
                                alias ParameterTypeTuple!(Cb) CBArgTypes;
                                if(typeid(CBArgTypes[0]) == argti)
                                {
                                        Cb(va_arg!(CBArgTypes[0])(argptr));
                                }
                        }
                }
                else
                {
                        alias Callbacks[0] Cb;
                        alias ParameterTypeTuple!(Cb) CBArgTypes;
                        if(typeid(CBArgTypes[0]) == argti)
                        {
                                Cb(va_arg!(CBArgTypes[0])(argptr));
                        }
                }
        }
}
import std.stdio;
void foo(...)
{
        writefln("foo");
        Goat!(
                (int i)
                {
                        writefln("CALLBACK int = %s", i);
                }
                )(_arguments, _argptr);
        writefln("bar");
}
void main()
{
        foo(333);
}
-- 
    
    
More information about the Digitalmars-d-bugs
mailing list