On 26/11/2011 7:03 PM, Andrei Alexandrescu wrote:
On 11/26/11 6:40 PM, Kapps wrote:
auto DoSomething(T)(T Data) if(isInputRange!(T)) { }
You could simply do:
auto DoSomething(Range Data) { }
where Range is defined as:
enum interface Range {
void popFront() const;
@property bool empty() const;
@property auto front();
}

What's "auto" here? This thing alone pretty much destroys the idea;
we've considered it very seriously.

Andrei


At this point, my solutions may not be particularly useful/feasible because I am not experienced in compiler writing.

My thoughts though, would be that because the interface is essentially compile-time verification, that the interface would never truly be part of the class. Then, when the compiler tries to verify it implements the interface, it checks the signatures for static methods replacing auto with any type (perhaps excluding void). This way auto does not need an actual value for the interface, but is still transparent to the user.

But this still wouldn't solve the issue of when you have multiple types that should be the same value. An alias, similar to Timon's suggestion, could be used. Another option is something like:
@property auto front();
@property typeof(front) getAndPopFront();

Reply via email to