On Monday, September 24, 2012 09:41:26 monarch_dodra wrote: > Regarding the ".init" issue, I hadn't thought of that, but it can > be worked around pretty easily with an is(R r): > > -------- > template Hello(R) > if ( is(R r) && > is(typeof(takeExactly(r, 1))) && > is(R == typeof(takeExactly(r, 1))) > ) > { > alias R Hello; > } > --------
That was one trick that I was not aware of. I didn't think that one is expression could have an effect on a later one in the surrounding expression. Cool. Though I would point out that that probably doesn't avoid the init problem, because R r uses R.init (unless is expressions treat it differently, which they may). The normal way to avoid that is to do R r = void; but I don't think that that would work in that is expression. Sometimes disabling init is useful, but it can definitely be problematic. It may ultimately have been a mistake to allow it. I don't know. - Jonathan M Davis