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.
