[Issue 8288] immutable(char)** is not convertable to const(char)**

d-bugmail at puremagic.com d-bugmail at puremagic.com
Sat Jun 23 21:39:41 PDT 2012


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


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

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


--- Comment #1 from Kenji Hara <k.hara.pg at gmail.com> 2012-06-23 21:42:07 PDT ---
This is design. The compiler rejects such conversion to keep const-correctness
will be broken.

See following test case.

----
void main()
{
    string yay = "fun";
    immutable(char)*  ip = yay.ptr;
    immutable(char)** ipp = &ip;

    // Implicit conversion from immutbale(char)** to const(char)** is
    // not allowed. But if this is allowed...?
    const(char)** cpp = ipp;

    char[] mstr = ['a', 'b', 'c'];
    char* mp = mstr.ptr;
    *cpp = mp;
        // You can rewrite a value of pointer to immutable data
        // as a value of pointer to mutable data!
    assert(cast(void*)ip is cast(void*)mp);
        // breaking const correctness!

    assert(*ip == 'a');
    mstr[0] = 'x';
    assert(*ip == 'x'); // immutable data is rewritten!!
}

-- 
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