Constructor call must be in a constructor

Don nospam at nospam.com
Thu Jul 7 02:41:06 PDT 2011


Jesse Phillips wrote:
> Loopback Wrote:
> 
>> Hi!
>>
>> While implementing and overloading several different operators for my
>> structure I've got stuck with an error.
>>
>> As noticed in the attachment, in my opBinaryRight function I mimic the
>> opBinary (left) operator by instantiating the structure itself to avoid
>> implementing duplicates of the binary operator overloads.
>>
>> The opBinaryRight operator is defined as following:
>>
>> DVector2 opBinaryRight(string op, T)(T lhs) if(Accepts!T)
>> {
>> 	// Error: template instance vector.DVector2.__ctor!(DVector2) error 
>> instantiating
>> 	return DVector2(lhs).opBinary!op(this);
>> }
>>
>> I create an additional DVector2 structure and then calls the opBinary
>> operator. When creating this DVector2 structure the following
>> constructor gets called:
>>
>> this(T)(T arg) if(Accepts!T)
>> {
>> 	static if(isScalar!T)
>> 		this(arg, arg);
>> 	else
>> 		// Error: constructor call must be in a constructor
>> 		this(arg.tupleof);
>> }
>>
>> [Blah, blah, blah]
> 
> This is probably related to a question recently asked on SO, which you might have even been the author. But for synergy: http://stackoverflow.com/questions/6553950/how-to-use-template-constructors-in-d

Bizarrely, the bit about template constructors was added to the docs as 
part of the fix to bug 2616.
Yet, bug 435 "Constructors should be templatized" is still open.
In view of this confusion, I would expect that compiler bugs related to 
this feature are very likely. Please submit a bug report.


More information about the Digitalmars-d-learn mailing list