www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - is(...) with alias this

reply "Zhenya" <zheny list.ru> writes:
Hi!
I just read the David's post 
http://forum.dlang.org/thread/kc9e74$bg7$1 digitalmars.com
"
This code worked with dmd 2.060:

import std.stdio;
import std.traits;

struct OhWhy(S) {
    S[] arr;
    alias arr this;
}

void main() {
	static assert(isArray!(OhWhy!(float)));
	
}

But fails with dmd 2.061:
ss.d(10): Error: static assert  (isArray!(OhWhy!(float))) is false

(same happens with alias this to static arrays and 
isArray/isStaticArray)


Is this intended or a regression? If latter, I'll submit a 
bug-ticket.
"
When I read this I understood that I don't know what should return
is(OhWhy!float unused == T[],T)

Of course OhWhy!float implicit convertable into float[].But on 
the other hand
is with == (not :) should check the type without conversions.
What do you think?

DMD 2.060 HEAD evaluate is(OhWhy!float unused == T[],T) -> true
Jan 05 2013
parent reply Philippe Sigaud <philippe.sigaud gmail.com> writes:
I think the alias this transformation is done 'before' any usual
conversion. I guess it's a real replacement inside the code (I'm not sure
how to explain my feeling).

But in any case, since OhWhy!(float) type is ... OhWhy!(float), I agree
this should fail.
Jan 05 2013
parent reply "monarch_dodra" <monarchdodra gmail.com> writes:
On Saturday, 5 January 2013 at 22:09:45 UTC, Philippe Sigaud 
wrote:
 I think the alias this transformation is done 'before' any usual
 conversion. I guess it's a real replacement inside the code 
 (I'm not sure
 how to explain my feeling).

 But in any case, since OhWhy!(float) type is ... OhWhy!(float), 
 I agree
 this should fail.
Agreed. This warrants a ticket in bugzilla.
Jan 05 2013
parent "Zhenya" <zheny list.ru> writes:
On Saturday, 5 January 2013 at 22:17:08 UTC, monarch_dodra wrote:
 On Saturday, 5 January 2013 at 22:09:45 UTC, Philippe Sigaud 
 wrote:
 I think the alias this transformation is done 'before' any 
 usual
 conversion. I guess it's a real replacement inside the code 
 (I'm not sure
 how to explain my feeling).

 But in any case, since OhWhy!(float) type is ... 
 OhWhy!(float), I agree
 this should fail.
Agreed. This warrants a ticket in bugzilla.
http://d.puremagic.com/issues/show_bug.cgi?id=9274
Jan 06 2013