On 11/4/14 4:48 PM, Walter Bright wrote:
On 11/4/2014 9:51 AM, Jonathan Marler wrote:
given the
output of Transform, the compiler cannot deduce what the input of
Transform was
EVEN IF THE TEMPLATE IS AS SIMPLE AS THIS ONE.

To answer a question not asked, why doesn't the compiler see the simple
case and handle it?

The problem is that this becomes a special case in the language
specification, making the language harder to understand. Cue bug reports
of people confused about why the simpler cases work and the more complex
ones do not, and they overall get a negative impression of the language.
And I don't blame them.


The real problem is that D singles out specialized type construction for inference of types.

For example:

void foo(T)(const(T)*)

This works, because D singles out type construction of an array as one that it can infer.

However, try to apply this to a custom type:

void foo(T)(Rebindable!(const(T)))

This *doesn't* work. I wish it would, but I can understand the opposition to it.

The issue is that D has gone down the path of using templates for type construction instead of adding language features, and this is one of the main drawbacks.

I continue to think we should be providing mechanisms to hook IFTI. There are several cases where things that "just work" with builtins cannot be extended to custom types.

-Steve

Reply via email to