On 17 August 2012 08:25, Andrew Pinski wrote:
> On Fri, Aug 17, 2012 at 12:15 AM, Ulrich Drepper <drep...@gmail.com> wrote:
>> Compiling the following code with D defined works.  Leave it out (and
>> remove the extra dimension which has no influence on the data layout
>> etc) and it compiles.  Is this correct?  Why wouldn't a simple use of
>> an array parameter be sufficient?
>
> It looks like the decaying to a pointer in the function argument is
> what is causing the issues.
>
> See  http://gcc.gnu.org/bugzilla/show_bug.cgi?id=24666 for other related 
> issues.

Those are real bugs, but in Ulrich's case the array to pointer
conversion is required and I don't believe it's a bug.  f(int arr[10])
has a parameter of type "array of int", so [dcl.fct]/5 says it decays
to "pointer to int" i.e. the signature is f(int*) and so it's not
possible to iterate over the parameter with a range-based for loop.

In the working case the parameter has type "array of array of int"
which decays to "pointer to array of int" and so the signature is
f(int (*)[10]) and dereferencing the parameter gives an array type,
which can be iterated over.

Reply via email to