Thread overview | ||||||
---|---|---|---|---|---|---|
|
June 24, 2010 is Expression, Type Identifier : TypeSpecialization | ||||
---|---|---|---|---|
| ||||
Hi, On the expressions page, http://www.digitalmars.com/d/2.0/expression.html under section 5: "is ( Type Identifier : TypeSpecialization )" it states: "The condition is satisfied if Type is the same as TypeSpecialization, or if Type is a class and TypeSpecialization is a base class or base interface of it. The Identifier is declared to be either an alias of the TypeSpecialization or, if TypeSpecialization is dependent on Identifier, the deduced type." The following prints 'test': class one { } class two : one { } alias one ONE; alias two TWO; static if ( is(TWO : ONE) ) writeln("test"); But if I add an Identifier T, the 'is' expression evaluates to 0, writeln is not executed: class one { } class two : one { } alias one ONE; alias two TWO; static if ( is(TWO T : ONE) ) writeln("test"); Is this a bug, or am I doing it wrong? |
June 24, 2010 Re: is Expression, Type Identifier : TypeSpecialization | ||||
---|---|---|---|---|
| ||||
Posted in reply to Andrej Mitrovic | > class one { }
> class two : one { }
> alias one ONE;
> alias two TWO;
> static if ( is(TWO T : ONE) )
> writeln("test");
>
> Is this a bug, or am I doing it wrong?
If it works without the aliases this is another strange alias bug.
|
June 24, 2010 Re: is Expression, Type Identifier : TypeSpecialization | ||||
---|---|---|---|---|
| ||||
Posted in reply to Trass3r | Trass3r Wrote: > > class one { } > > class two : one { } > > alias one ONE; > > alias two TWO; > > static if ( is(TWO T : ONE) ) > > writeln("test"); > > > > Is this a bug, or am I doing it wrong? > > If it works without the aliases this is another strange alias bug. Do you mean the "alias one ONE; alias two TWO;" statements, or the missing T alias? In the first case, If I comment out the two alias statements, it will still compile. But that's not a bug, it's still syntactically correct (in that case "ONE" and "TWO" don't exist, but the compiler won't complain about it). In the second case, the aliased identifier doesn't need to be there unless we want to use it, see form #2 of the is expressions near the bottom of the page: http://www.digitalmars.com/d/2.0/expression.html |
June 24, 2010 Re: is Expression, Type Identifier : TypeSpecialization | ||||
---|---|---|---|---|
| ||||
Posted in reply to Andrej Mitrovic | You are right. Even this doesn't work: import std.stdio; class one { } class two : one { } void main() { static if ( is(two T : one) ) writeln("test"); } Additionally it's really strange dmd doesn't complain about TWO and ONE if the aliases are omitted. Seems like two distinct bugs to me. File bug reports. |
Copyright © 1999-2021 by the D Language Foundation