On 09/23/2012 03:48 PM, Andrei Alexandrescu wrote:
On 9/23/12 8:47 AM, Timon Gehr wrote:
import std.range, std.traits;
import std.stdio;
template Hello(R) if(is(typeof(R._input.takeExactly(2)) == R)){
alias R Hello;
}
That's the nicest.
Well, I noticed it is not entirely correct as takeExactly special cases
sliceable inputs. Therefore, the guard also passes for ranges that have
a sliceable member called _input of the same range type. The correct
guard therefore would be:
if(hasSlicing!R || is(typeof(R._input.takeExactly(2)) == R))
or
if(!hasSlicing!R && is(typeof(R._input.takeExactly(2)) == R))
depending on what the goal is.
Regarding availability of "_input", I meant to make
it available systematically as "input" for ranges where the notion makes
sense.
Andrei
This seems to be reasonable.