typeof and my crummy code...

Bill Baxter wbaxter at gmail.com
Fri Nov 6 10:11:46 PST 2009


On Fri, Nov 6, 2009 at 9:02 AM, Ellery Newcomer
<ellery-newcomer at utulsa.edu> wrote:
> Another question: given
>
> import std.stdio;
> void main()
> {
>    int i( /*char*/ ){return 1;}
>    writeln(typeof(i).stringof);
> }
>
>
> This gives
>
> (int())()

That seems buggy to me.  I would expect it to say "int".

> and with the char uncommented it errors

That seems right.  i by itself is an attempt to call i with no
arguments.  You need to use & with functions if you want to avoid
that.

> * typeof doesn't evaluate the expression, according to the spec.

But it is supposed to figure out what the type would be if it /were/ evaluated.

> * then why does it matter if the function has its parameters applied above?

"i" is a valid call in the first case, not in the second case.

> * for a function sans params, there would be a semantic ambiguity (in D1
> land, at least) in typeof(i) (params applied, or no?)

You need to use & if you're talking about the function itself and not
what it evaluates to.

> * and for the case above, why the heck are we mixing expression and type
> in the string result?

I think that's a bug.  Does using &i give you the function type as expected?

--bb


More information about the Digitalmars-d-learn mailing list