Template specification conflict

Dmitry Olshansky dmitry.olsh at gmail.com
Tue Aug 2 05:13:41 PDT 2011


On 02.08.2011 16:06, simendsjo wrote:
> On 02.08.2011 13:55, Dmitry Olshansky wrote:
>> On 02.08.2011 15:06, simendsjo wrote:
>>> The following program gives me
>>> "Error: template t.S.__ctor(C) if(isSomeChar!(C)) conflicts with
>>> constructor t.S.this at t.d(4)"
>>>
>>> Is this because char etc can be converted to uint? Shouldn't the
>>> template specification make this unambiguous?
>>>
>>> import std.traits;
>>>
>>> struct S {
>>> this(uint i) {}
>>> this(C)(C c) if(isSomeChar!C) {}
>>> }
>>>
>>> void main() {}
>>
>> struct S {
>> this()(uint i) {}
>> this(C)(C c) if(isSomeChar!C) {}
>> }
>>
>> should do it, though it (and workaround) looks like a bug to me.
>>
>
> With the empty templated this, I get other errors though:
> "t.d(5): Error: constructor t.S.this conflicts with template 
> t.S.__ctor() at t.d(4)"
>
> struct S {
>     this()(int a) {} // 4
>     this(int a, int b) {} // 5
> }
>
Same logic here once you have template constructor, all others need to 
be template, empty spec is a trick to get anything to be a template. And 
in this example you really do not need empty spec () in 4.

-- 
Dmitry Olshansky



More information about the Digitalmars-d-learn mailing list