On Wednesday, 17 February 2016 at 12:46:08 UTC, Jonathan M Davis wrote:
but violate the type system by casting away const and mutating, not realizing that unlike C++, it's undefined behavior in D.

Regardless of whether Walter's (and thus D's) stance on const is the right one, it clearly doesn't jive with what a lot of folks (particularly those from C++) are looking for or expecting.

- Jonathan M Davis

        struct (bla1, bla2) Test
        {
                int rc;
                bla1 int number;
                (bla2) Payload payload;

                void doSomething() (shared, immutable)
                {
                }
        }
        
        (shared, immutable) Test obj;

        bla1 becomes shared and bla2 becomes immutable, but
        the payload might not be immutable because it is
        (bla2) instead of just bla2.
        ---
        Can it be made in a way that the blablas do not
        participate in the static if?
        ----
        Could "shared", "immutable" be separated from
        the type int, float?
        
        (shared, immutable) Test!(int, float) obj;
        ---
        I did some "const(immutable) int" and the the
        compiler says basic type expected.

        What is the basic type from "const(shared, immutable)",
        would that be "const(shared const, const)"?

        And then the basic type from "const(const, immutable)"
        would be "const".
        ---
        Also would it be possible to determine the implicit
        conversion rules based solely on these qualifiers and
        not on the content of the object?
        
        (const, const) Test t = new (const, immutable) Test();
        const Test t = new (const,const) Test();
        ---

Reply via email to