Why D const is annoying

Walter Bright newshound2 at digitalmars.com
Sat Dec 10 03:11:39 PST 2011


On 12/10/2011 3:04 AM, Mehrdad wrote:
> On 12/10/2011 3:01 AM, Walter Bright wrote:
>> On 12/10/2011 2:34 AM, Mehrdad wrote:
>>> ... and another...
>>>
>>> struct Matrix(T, size_t N = 1)
>>> { public auto mul(Matrix!(T, N) other) const { return this; } }
>>
>>
>> In general, to refer to the current template being expanded from inside of it,
>> just give its name, as in:
>>
>> Matrix!(T,N) => Matrix
> That's not the issue.
>
> If you say 'int' instead of size_t, it works fine.

That's because

  Matrix!(int, cast(int)1)

is considered a different template instantiation (and hence a different type) from

  Matrix!(int, cast(uint)1)

Instantiation types are based on the arguments' types, not the parameters' types.

If you use my suggestion for the shorthand notation, your code will work as you 
expect.



More information about the Digitalmars-d mailing list