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