[Issue 11206] New: static array can be implicitly built from items, when nested in aggregate

d-bugmail at puremagic.com d-bugmail at puremagic.com
Wed Oct 9 07:22:42 PDT 2013


http://d.puremagic.com/issues/show_bug.cgi?id=11206

           Summary: static array can be implicitly built from items, when
                    nested in aggregate
           Product: D
           Version: D2
          Platform: All
        OS/Version: All
            Status: NEW
          Keywords: accepts-invalid
          Severity: normal
          Priority: P2
         Component: DMD
        AssignedTo: nobody at puremagic.com
        ReportedBy: monarchdodra at gmail.com


--- Comment #0 from monarchdodra at gmail.com 2013-10-09 07:22:40 PDT ---
Just to be clear, I'm not talking about "initial construction", where, eg, this
is correct:

//----
alias ARR = int[1];
struct S{int i;this(int){}}

struct AGG(T)
{
    T t;
}

void main()
{
    S s1 = S(1); //Explicit, OK
    S s2 = 1; //Implicit, OK
    ARR arr1 = [1]; //Explicit, OK
    ARR arr2 = 1; //Implicit, OK
}
//----

This is OK: The table makes an implicit construction, thanks to an explicit
type declaration.

However, if the table is nested inside an aggregate, then this should not
happen: Aggregate construction requires an exact type match (possibly via alias
this), *However*, individual elements *may not* be implicitly constructed from
pass in arguments:

//----
void main()
{
    AGG!S ts2 = AGG!S(S(2)); //Explicit. Good.
    AGG!S ts1 = AGG!S(1); //NO! ILLEGAL REQUEST FOR IMPLICIT CONSTRUCTION!

    AGG!ARR tarr1 = AGG!ARR([1]); //Explicit is good
    AGG!ARR tarr1 = AGG!ARR(1); //This works...? [HERE]
}
//----

[HERE]: This is a violation of the type system. With aggregate initialization,
each argument is supposed to match the type of the aggregated element, or be
*implicitly*castable* to said element. In the case of "element => static array
element", we have neither.

static arrays are the *only* type that allow this. I think making an exception
for static arrays is surprising and wrong. It should be rejected.

Related:
http://d.puremagic.com/issues/show_bug.cgi?id=10973

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------


More information about the Digitalmars-d-bugs mailing list