www.digitalmars.com         C & C++   DMDScript  

digitalmars.D - implicit conversions between array and pointer

reply terranium <terranium yandex.ru> writes:
int* p;
int[] a=[1,2,3];
p=a;

spec says it should compile, but it won't. Where is the bug - in spec or in
compiler.
Apr 25 2008
next sibling parent Frank Benoit <keinfarbton googlemail.com> writes:
terranium schrieb:
 int* p;
 int[] a=[1,2,3];
 p=a;
 
 spec says it should compile, but it won't. Where is the bug - in spec or in
compiler.

In the spec, the implicit convertions to .ptr property was removed some time ago. p=a.ptr;
Apr 25 2008
prev sibling next sibling parent reply "Janice Caron" <caron800 googlemail.com> writes:
On 25/04/2008, terranium <terranium yandex.ru> wrote:
 int* p;
  int[] a=[1,2,3];
  p=a;

  spec says it should compile, but it won't. Where is the bug - in spec or in
compiler.

If I had to guess, I'd say the spec is wrong. It's a narrowing conversion. Data is lost. To mind, that means it ought to require an explicit cast.
Apr 25 2008
parent terranium <terranium yandex.ru> writes:
Hmm... It's ref types, they are casted differently.
Apr 25 2008
prev sibling parent reply "Jarrett Billingsley" <kb3ctd2 yahoo.com> writes:
"terranium" <terranium yandex.ru> wrote in message 
news:futcip$peg$1 digitalmars.com...
 int* p;
 int[] a=[1,2,3];
 p=a;

 spec says it should compile, but it won't. Where is the bug - in spec or 
 in compiler.

You must be looking at a terribly out-of-date spec. http://www.digitalmars.com/d/1.0/arrays.html See the "Implicit conversions" section. As was mentioned, implicit conversion from T[] to T* was removed more than a year ago.
Apr 26 2008
parent reply terranium <spam here.lot> writes:
 You must be looking at a terribly out-of-date spec.
 
 http://www.digitalmars.com/d/1.0/arrays.html
 
 See the "Implicit conversions" section.  As was mentioned, implicit 
 conversion from T[] to T* was removed more than a year ago. 

this section is for objects - reference types, I'm talking about value types. Look at sections Usage and Strings. int* p; int[3] s; int[] a; p = s; // p points to the first element of the array s. p = a; // p points to the first element of the array a. char[] str; char* p = str; // pointer to 1st element Of course array of ref types can't be converted to pointer to this ref type because D doesn't support pointers to ref types.
Apr 26 2008
parent terranium <spam here.lot> writes:
oops, my bad.
Apr 26 2008