www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 14450] New: Incorrect overloading of immutable constructor

https://issues.dlang.org/show_bug.cgi?id=14450

          Issue ID: 14450
           Summary: Incorrect overloading of immutable constructor for
                    template struct
           Product: D
           Version: D2
          Hardware: x86_64
                OS: Linux
            Status: NEW
          Severity: normal
          Priority: P1
         Component: DMD
          Assignee: nobody puremagic.com
          Reporter: maximzms gmail.com

test.d:
--------------------
struct Foo // No templates - OK
{
    this(int) {}
    this(int) immutable {}
}

struct Boo() // Template structure and ctors - OK
{
    this()(int) {}
    this()(int) immutable {}
}

struct Bar() // Template structure - Error
{
    this(int) {}
    this(int) immutable {}
}

void main()
{
    Foo(1);
    Boo!()(1);
    Bar!()(1); // Error
}
--------------------

DMD output:
--------------------
test.d(24): Error: test.Bar!().Bar.__ctor called with argument types (int)
matches both:
test.d(15):     test.Bar!().Bar.this(int _param_0)
and:
test.d(16):     test.Bar!().Bar.this(int _param_0)
--------------------

The overload works correctly for both regular struct and template with template
constructors, but fails for template struct with regular constructors.

May be related to [issue 13475](https://issues.dlang.org/show_bug.cgi?id=13475)

--
Apr 15 2015