Disallow arrays as pointers

Don nospam at nospam.com
Mon Oct 31 00:48:47 PDT 2011


On 30.10.2011 22:29, bearophile wrote:
> I have translated C code similar to:
>
>
> something foo(int n) {
>      int *array = malloc(n * sizeof(int));
>
>      int i;
>      for (...) {
>          for (i = 0; i<  n; i++, array++) {
>              *array = ...;
>              *array = ...;
>          }
>      ...
> }
>
>
> Into D2 code similar to:
>
>
> something foo(int n) {
>      auto array = new int[n];

>              *array = ...;

> I think the D2 compiler has to catch this bug:
>
> *array = ...;
>
> D arrays aren't pointers. Letting the compiler see them as pointers is bug-prone, not tidy, and doesn't help D newbies understand how D represents its arrays.

What's New for D 0.177
Dec 9, 2006
New/Changed Features
     Arrays no longer implicitly convert to pointers unless -d is used.

For example, this code:

void main()
{
    int[] x = new int[59];
    int *q = x;
}
compiled on 0.176 and earlier, but not any more. The case involving *arr 
seems to have just been missed. This is a simple accepts-invalid bug. 
Not an enhancement request.



More information about the Digitalmars-d mailing list