Andrei Alexandrescu Wrote: > On 08/28/2010 08:29 PM, dsimcha wrote:
> > An issue that comes up very frequently when trying to use > > const, pure or nothrow in generic code is lack of knowledge > > of whether the functions you're calling are > > const/pure/nothrow. For example: > > T abs(T num) pure nothrow { > > return (num< 0) ? -1 * num : num; > > } [...] > > A solution I propose is to allow the annotations @autoconst, > > @autopure and @autonothrow for template functions. [...] > > Does this sound like it could feasibly be implemented and > > would work well? > Yah, with the growing interest in applying qualifiers at a larger scale > (and making Phobos a good example of such) this is quite timely. > I've been mulling myself over a similar proposal. > What I had in mind is a bit more structured - it would allow > selecting a type or an expression and assessing its > constness/purity. That would be done just like .sizeof and > .stringof work - by defining two more special members > .constof, .pureof, .nothrowof. For example: > T abs(T num) (-1 * num).pureof (-1 * num).nothrowof { > return (num < 0) ? -1 * num : num; > } Could something along the lines of a .qualof member work, for those times where you want to duplicate all relevant qualifiers? That seems likely to be the general case, and could considerably reduce the verbosity involved. T abs(T num) (-1 * num).qualof { return (num < 0) ? -1 * num : num; } is even shorter, and would have the possibility of also handling concerns of constness and sharedness and the like properly. Cheers, Pillsy