Partial return type specification
Pelle
pelle.mansson at gmail.com
Mon Oct 11 23:28:54 PDT 2010
On 10/11/2010 10:56 PM, bearophile wrote:
> Pelle:
>
>> string assertReturnsRangeOf(T)() {
>> return "static assert (is(Unqual!(ForeachType!(typeof(return))) == "
>> ~ T.stringof ~ "));";
>> }
>>
>> auto foo() {
>> return map!q{a*a}([1,2,3,4,5]);
>> mixin (assertReturnsRangeOf!int);
>> }
>>
>> You were probably looking for a more general and, well, good, solution.
>> This does however convey some intent, and kind of works.
>
> Ideally the partial specification syntax for ranges may work at the calling point too:
>
> void main() {
> Range!int results = foo();
> }
>
> Here results is of its specific type, it's not a "Range!int", so Range!int works as "auto". The difference is that the compiler makes sure that's an iterable of ints, and not an iterable of floats or a not iterable, etc.
>
> Bye,
> bearophile
This I would very much like. Also, being able to specify that you return
a Range!int or ForwardRange!int would be very useful. Without losing the
value types, of course. :-)
More information about the Digitalmars-d
mailing list