/*
TEST_OUTPUT:
---
fail_compilation/fail163.d(11): Error: cannot implicitly convert expression `q` of type `const(char)[]` to `char[]`
---
*/
void test1()
{
    char[] p;
    const(char)[] q;
    p = q;
}

/*
TEST_OUTPUT:
---
fail_compilation/fail163.d(24): Error: cannot implicitly convert expression `p` of type `const(int***)` to `const(int)***`
---
*/
void test2()
{
    const int*** p;
    const(int)*** cp;
    cp = p;
}

/*
TEST_OUTPUT:
---
fail_compilation/fail163.d(37): Error: cannot modify `const` expression `p`
---
*/
void test3()
{
    const(uint***) p;
    const(int)*** cp;
    p = cp;
}

/*
TEST_OUTPUT:
---
fail_compilation/fail163.d(50): Error: cannot implicitly convert expression `cp` of type `const(int)***[]` to `const(uint***)[]`
---
*/
void test4()
{
    const(uint***)[] p;
    const(int)***[] cp;
    p = cp;
}

/*
TEST_OUTPUT:
---
fail_compilation/fail163.d(63): Error: cannot modify `const` expression `*p`
---
*/
void test5()
{
    int x;
    const(int)* p = &x;
    *p = 3;
}

/*
TEST_OUTPUT:
---
fail_compilation/fail163.d(76): Error: cannot implicitly convert expression `& x` of type `int*` to `immutable(int)*`
fail_compilation/fail163.d(77): Error: cannot modify `immutable` expression `*p`
---
*/
void test6()
{
    int x;
    immutable(int)* p = &x;
    *p = 3;
}

/*
TEST_OUTPUT:
---
fail_compilation/fail163.d(89): Error: cannot implicitly convert expression `& x` of type `const(int)*` to `int*`
---
*/
void test7()
{
    const(int) x = 3;
    int* p = &x;
}
