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

d-bugmail at puremagic.com d-bugmail at puremagic.com
Tue Dec 20 05:23:00 PST 2011


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



--- Comment #11 from Don <clugdbug at yahoo.com.au> 2011-12-20 05:22:56 PST ---
(In reply to comment #10)
> (In reply to comment #9)
> > Complete section of the spec:
> > ------
> > 6. is ( Type Identifier == TypeSpecialization )
> 
> You were suggesting in comment 6 that is(x == function), not is(x T ==
> function), should fail if x is variadic.

I didn't intend to. All discussion has been about is(Type Identifier ==
function). Sorry that that wasn't clear.

> > keyword     alias type for Identifier
> > function     TypeTuple of the function parameter types
> > ------
> > This is impossible if the function has a C-style variadic parameter. Although
> > solution (2) would allow it to be a Tuple, it wouldnt be a TypeTuple. So a
> > change to the spec is inevitable.
> 
> I see now.  So I suppose what we need is distinct syntaxes for extracting
> variadic and non-variadic parameter lists.  So maybe:
> 
>     is ( Type == function )
>         passes iff Type is a function type, variadic or not
>     is ( Type Identifier == function )
>         passes iff Identifier is a non-variadic function type, and 
>         binds Identifier to a tuple of the parameter types
>     is ( Type Identifier , ... == function )
>         passes iff Identifier is a variadic function type, and binds
>         Identifier to a tuple of the fixed parameter types

Yeah, that would work. But it's far more complicated than (1), changing one
line of the spec to match the compiler, namely that:
is(Type Identifier == function) binds Identifier to:
-TypeTuple of the function parameter types
+TypeTuple of the function parameter types. For C-style variadic functions,
only the non-variadic parameters are included.

and then (possibly*) provide some other mechanism for identifying if a function
is C-style variadic. is() expressions are just about the ugliest thing in the
language already, I'm loathe to recommend making them even uglier.


* I say possibly, because I think that given a tuple T and return type R, you
can check if typeof(f) ==  extern(C) R function (T, ...)
So I'm not sure that any compiler changes are required.

-- 
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