http://d.puremagic.com/issues/show_bug.cgi?id=9361
--- Comment #3 from Phil Lavoie <[email protected]> 2013-01-21 06:19:00 PST --- (In reply to comment #1) > Reduced test case: > > struct Unit(A) > { > void butPleaseDontUseMe()() > if (is(unitType!((this)))) // ! > {} > > } > template isUnit(alias T) if ( is(T)) {} > template isUnit(alias T) if (!is(T)) {} > template unitType(alias T) if (isUnit!T) {} > void main() > { > Unit!int u; > u.butPleaseDontUseMe(); // crashes > } > > ==== > > I think the instantiation unitType!((this)) in the template constraint for > butPleaseDontUseMe template function should always fail, because the 'this' > symbol yet not has an actual entity while the constraint evaluation. > > That means, the invocation of s.foo() should fail in following. > > template Sym(alias A) { enum Sym = true; } > struct S { > void foo()() if (Sym!(this)) {} > // Sym!(this) always make an error, because > // Sym template never be able to access > // valid 'this' symbol. > } > void main() { S s; s.foo(); } Yes it makes sense, however the error message is clearly not appropriate! Something like: dmd: Error: If you use this in template constraint again I will hate you. Should do :) -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
