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.