On Fri, Feb 10, 2012 at 08:53:58PM +0100, Timon Gehr wrote: > On 02/10/2012 07:50 PM, H. S. Teoh wrote: [...] > >On that note, I discovered that if you want signature constraints on > >a derived class, the syntax is unbearably ugly: > > > > class Derived(T) > > if (/* conditions */) > > : Base > > { > > ... > > } > > > >I would have expected the syntax to be like this instead: > > > > class Derived(T) : Base > > if (/* conditions */) > > { > > ... > > } [...] > It makes more sense as it is. Consider the instantiation > 'Derived!int' and the condition 'is(typeof(T)==class)'.
Well, to me, the "if" condition should apply to the entire class specification "class Derived(T) : Base", and not just to Derived(T). For example, something like this wouldn't be in a logical sequence: class Derived(T) if (is(Base!T ...)) : Base!T { ... } since you'll want the condition to restrict what values Base!T can take on. This would be more readable: class Derived(T) : Base!T if (is(Base!T ...)) { ... } T -- "I'm running Windows '98." "Yes." "My computer isn't working now." "Yes, you already said that." -- User-Friendly