[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