On Tuesday, 4 November 2014 at 21:48:29 UTC, 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.

Actually I just realized that this would be IMPOSSIBLE in the general case since a template transormation isn't necessarily a 1-1 mapping. Consider,

template Normalize(T)
{
    static if(isIntegral!T) {
        alias Normalize = int;
    } else {
        alias Normalize = string;
    }
}

Given the output of Normalize, say int, there's no way of knowing if T was ubyte, long, int or whatever.

Reply via email to