Thread overview
[Issue 4454] New: Can't implicitly cast static arrays of primitives to immutable
Jul 13, 2010
David Simcha
Oct 06, 2011
Kenji Hara
Oct 06, 2011
Kenji Hara
Sep 09, 2012
Kenji Hara
July 13, 2010
http://d.puremagic.com/issues/show_bug.cgi?id=4454

           Summary: Can't implicitly cast static arrays of primitives to
                    immutable
           Product: D
           Version: D2
          Platform: Other
        OS/Version: Windows
            Status: NEW
          Severity: normal
          Priority: P2
         Component: DMD
        AssignedTo: nobody@puremagic.com
        ReportedBy: dsimcha@yahoo.com


--- Comment #0 from David Simcha <dsimcha@yahoo.com> 2010-07-13 12:09:39 PDT ---
Now that static arrays are value types, this should be legal because there's no mutable indirection:

void main() {
    immutable uint[2] foo = getArray();
}

uint[2] getArray() {
    uint[2] ret;
    return ret;
}


It doesn't work on 2.047.  Instead I get:

Error: cannot implicitly convert expression (getArray()) of type uint[2u] to
const(immutable(uint)[])

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
October 06, 2011
http://d.puremagic.com/issues/show_bug.cgi?id=4454



--- Comment #1 from Kenji Hara <k.hara.pg@gmail.com> 2011-10-06 13:52:30 PDT ---
Remove dependency to std.traits.

----
private template staticLength(tuple...)
{
    enum size_t staticLength = tuple.length;
}
template ReturnType(func...)
    if (staticLength!(func) == 1)    // (a)
{
    static if (is(typeof(func) R == return))
        alias R ReturnType;
    else
        static assert(0, "argument has no return type");
}

struct PointImpl(T)
{
    @property auto test()
    {
        return PointImpl!int();
    }
}

struct Wrapper(T)
{
    T payload;

    auto test()
    {
        //pragma(msg, ReturnType!(T.test));
        //static if (is(ReturnType!(T.test))) { }
        static if (is(ReturnType!(T.test) == void)) { }
        return payload.test;
    }
}

Wrapper!(PointImpl!int) point;

void main()
{
    auto x = point.test;
}
----

A gagged forward reference error at (a) causes this problem.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
October 06, 2011
http://d.puremagic.com/issues/show_bug.cgi?id=4454



--- Comment #2 from Kenji Hara <k.hara.pg@gmail.com> 2011-10-06 13:56:53 PDT ---
(In reply to comment #1)
[snip]

Sorry, I missed posting issue page. Please ignore comment #1.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
September 09, 2012
http://d.puremagic.com/issues/show_bug.cgi?id=4454


Kenji Hara <k.hara.pg@gmail.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
         Resolution|                            |DUPLICATE


--- Comment #3 from Kenji Hara <k.hara.pg@gmail.com> 2012-09-09 05:03:53 PDT ---
*** This issue has been marked as a duplicate of issue 8201 ***

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