http://d.puremagic.com/issues/show_bug.cgi?id=6094
Don <clugd...@yahoo.com.au> changed: What |Removed |Added ---------------------------------------------------------------------------- Severity|regression |enhancement --- Comment #9 from Don <clugd...@yahoo.com.au> 2011-06-29 23:19:32 PDT --- (In reply to comment #8) > I'm pretty sure this is a regression between DMD 2.052 and DMD 2.053. I found > this 'regression' in template constraints: > > if( isPointer!T && isPointer!(pointerTarget!T) ) > > the problem is that if T is a string, then pointerTarget!T can not compile. > This wouldn't be an issue if that meant the template constraint failed > gracefully, but instead it halts compilation. No, that's not a regression. && was never defined to work in that way. It's a Phobos bug which has been exposed. > Anyways, there is the question of whether or not shortcutting is the correct > behavior. > > From a performance point of view, as someone who has spent time optimizing > templates for compile times, anything that can reduce DMD's memory-usage or > compile times is a good thing. > > From a practical point of view, being able to guard statements without using a > static if is great for template constraints and other short templates. > > From a consistently point of view CTFE is already shortcutting everything > inside a if(!__ctfe){} block. (and probably other if(false){} blocks as well). > And we will never be able give up shortcutting if(!__ctfe){} blocks. That is COMPLETELY irrelevant. It has nothing in common. To repeat what I said earlier: the constant folding behaviour of && does *not* involve CTFE. In fact, it's not even a change to the constant folding; it's a change to the semantic pass of &&. What this request is: Given X && Y, if X always evaluates to false, do not perform _any_ semantic analysis on Y. No matter what garbage it is. Likewise for X || Y; if X is true, don't semantically analyse Y. So, instead of 1. semantic analysis X and Y; 2. constant fold X&&Y; it would become: 1. semantic X; 2. constfold X; 3. if (X is true) return true; 4. semantic Y; 5. constfold X&&Y. This is clearly a major enhancement request and not a regression. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------