typeof(typename) fails silently
Sean Kelly
sean at invisibleduck.org
Mon Sep 15 18:00:54 PDT 2008
== Quote from Sean Kelly (sean at invisibleduck.org)'s article
> Jarrett Billingsley wrote:
> > On Mon, Sep 15, 2008 at 7:08 PM, Sean Kelly <sean at invisibleduck.org> wrote:
> >> Code like the following:
> >>
> >>
> >> static if(is(typeof(int))) { pragma(msg, "hi"); }
> >>
> >> used to work just fine (ie. it used to print "hi") even though typeof was
> >> being used to evaluate a type. Now apparently the same tests fail, but they
> >> do so silently. If typeof isn't supposed to be used to evaluate types,
> >> could we _please_ get a compile error about this? I've just discovered that
> >> a bunch of Tango code silently stopped working when this change was
> >> implemented and it would have been great if the build had simply failed on
> >> what is now apparently an illegal operation.
> >>
> >
> > Oh but Sean, anything illegal inside an is() expression doesn't give an error!
> Technically untrue. An 'is' expression must contain a type. ie. you
> can't do this:
> is(5)
> That aside, the contents of an 'is' expression must still be valid D
> code, and typeof(int) is clearly no longer valid D code. All I'm asking
> is to be told that my code is invalid.
Darnit, I take it back. I suppose it's possible that the symbol passed to typeof
within an 'is' expression might be a type and it might be a value. The 'is'
expression is just doing what it's supposed to. What a pain :-)
Sean
More information about the Digitalmars-d-bugs
mailing list