On 2011-03-02 09:07, Jonathan M Davis wrote:
On Tuesday 01 March 2011 23:52:38 Jacob Carlborg wrote:
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.

Except that that works with normal default arguments. I assume that he did not
realize that.

- Jonathan M Davis

Neither did I.

--
/Jacob Carlborg

Reply via email to