[Issue 664] is(func T == function) ignores variadic arguments

d-bugmail at puremagic.com d-bugmail at puremagic.com
Wed Dec 7 02:29:55 PST 2011


http://d.puremagic.com/issues/show_bug.cgi?id=664


Don <clugdbug at yahoo.com.au> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |clugdbug at yahoo.com.au


--- Comment #4 from Don <clugdbug at yahoo.com.au> 2011-12-07 02:29:39 PST ---
There are two ways to fix this:
(1) Change the spec to define that (is == function) returns the non-variadic
parameters.
(2) Create a '...' object inside the compiler, and allow it to be a member of a
tuple. Variadics are neither types nor expressions, nor symbols. Creates lots
of special cases all through the compiler.There are tricky examples like:

template baa(T...) {
    alias void function(T) a;  // OK, params are (char, ...)
    alias void function(T, ...) b; // illegal: (char, ..., ...)
    alias void function(T, int) c; // illegal: (char, ..., int)
}

alias baa!( is ( void function(char, ...) == function)).b baz;


And if we fix those problems, maybe we should allow this syntax:
alias baa!(char, ...).a foo;
because otherwise I don't know what to print when you do:
pragma(msg, T);
but then we have to make sure we can always distinguish variadic function
parameters from template variadics.

Is this issue important enough to justify (2) ?

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------


More information about the Digitalmars-d-bugs mailing list