Constructor template -- bug?

Jacob Carlborg doob at me.com
Tue Mar 1 23:52:38 PST 2011


On 2011-03-02 08:47, Jonathan M Davis wrote:
> On Tuesday 01 March 2011 23:43:27 Jonathan M Davis wrote:
>> On Tuesday 01 March 2011 22:18:49 Bekenn wrote:
>>> Code:
>>> 	class MyException : Exception
>>> 	{
>>> 	
>>> 		this(string message, string file, size_t line, Throwable next = null)
>>> 		{
>>> 		
>>> 			super(message, file, line, next);
>>> 		
>>> 		}
>>> 		
>>> 		this(string file = __FILE__, size_t line = __LINE__)(string message,
>>>
>>> Throwable next = null)
>>>
>>> 		{
>>> 		
>>> 			this(message, file, line, next);
>>> 		
>>> 		}
>>> 	
>>> 	}
>>> 	
>>> 	void main()
>>> 	{
>>> 	
>>> 		throw new MyException("Bluh!");
>>> 	
>>> 	}
>>>
>>> Error message:
>>> 	test.d(8): Error: template test.MyException.__ctor(string file =
>>>
>>> __FILE__,size_t line = __LINE__) conflicts with constructor
>>> test.MyException.this at test.d(3)
>>>
>>> If I remove the normal constructor and call super instead of this from
>>>
>>> the constructor template, then I get this slightly different error message:
>>> 	test.d(1): Error: constructor test.MyException.this conflicts with
>>>
>>> template test.MyException.__ctor(string file = __FILE__,uint line =
>>> __LINE__) at test.d(3)
>>>
>>> Is this a compiler bug, or am I Doing It Wrong?
>>
>> You cannot currently templatize class constructors:
>>
>> http://d.puremagic.com/issues/show_bug.cgi?id=435
>>
>> And currently if one overload of a function is templatized, _all_ overloads
>> of that function must templatized:
>>
>> http://d.puremagic.com/issues/show_bug.cgi?id=2972
>> http://d.puremagic.com/issues/show_bug.cgi?id=4749
>
> I should also point out that there is absolutely no need to use template for
> what you're trying to do. Just declare the constructor like so:
>
> this(string message, string file = __FILE__, size_t line = __LINE__ Throwable
> next = null) { ... }
>
> - Jonathan M Davis

I guess the reason why he would do that is to catch the file and line 
number where the constructor is called.

-- 
/Jacob Carlborg


More information about the Digitalmars-d-learn mailing list