On Monday, 28 April 2014 at 14:02:33 UTC, Steven Schveighoffer wrote:
On Mon, 28 Apr 2014 06:04:53 -0400, John Colvin <john.loughran.col...@gmail.com> wrote:

On Monday, 28 April 2014 at 09:36:08 UTC, Andrey wrote:
not a bug.

b.f[10] is indexing the pointer to the array, not the array itself.

b.f[0][10] is indexing the array (with the 10), but I would argue it is better to write *(b.f)[10] so as to be clear that f is not an array.

thank you, John.

compiler said that '*(b.f)[10]' is deprecated, and I should write like this

void foo()
{
  Type3 b;
  Type1  d;
  d = *(b.f[10]).ptr;
}

struct T
{
        int[10]* f;
}

void main()
{
        int[10] test;
        T t = T(&test);
        T* b = &t;
        
        auto d = (*(b.f))[4]; //ugly but clear.
        d = b.f[0][4]; //prettier but less clear.
}

note the extra brackets on the ugly one, I forgot them before.

You don't need them. (*b.f)[4] works. '.' has precedence over '*'.

-Steve

The extra ones I referred to were the outer ones. Nonetheless, you're example is correct.

Reply via email to