`ref T` should be a type!!
Rubn
where at is.this
Tue Apr 2 00:06:23 UTC 2019
On Monday, 1 April 2019 at 23:04:15 UTC, Atila Neves wrote:
> On Monday, 1 April 2019 at 20:00:34 UTC, Rubn wrote:
>> On Monday, 1 April 2019 at 13:57:17 UTC, Atila Neves wrote:
>>> On Monday, 1 April 2019 at 13:09:28 UTC, Dein wrote:
>>>> On Monday, 1 April 2019 at 01:18:44 UTC, Walter Bright wrote:
>>>>> On 3/31/2019 5:35 PM, Rubn wrote:
>>>>>> you can literally use it everywhere else you can use a
>>>>>> type.
>>>>>
>>>>> No, you can't. An array of refs won't compile, either.
>>>>>
>>>>> void test(int& a[]); // error
>>>>>
>>>>> A C++ ref can only appear at the top of a type AST, which
>>>>> is unlike any other type. Which exactly matches the only
>>>>> place a storage class can be!
>>>>
>>>> Seriously? You should know as well as I do what that
>>>> function actually translates to:
>>>>
>>>> void test(int&* const a);
>>>>
>>>> So I ask you now, how do you get a pointer to a reference.
>>>> Its the exact same thing. Not sure if you are trying to just
>>>> deceive me with some syntax sugar in C++ or what.
>>>
>>> Bad example, but the point stands:
>>>
>>>
>>> ----
>>> // foo.cpp
>>> int fun() {
>>> int& foo[5]; // doesn't compile
>>> }
>>> ----
>>>
>>> I'd never even thought of it until Walter mentioned it that
>>> one can't have an array of references. Huh.
>>
>> Arrays in C++ are just pointers. If you can't have a pointer
>> to something, it is only natural you can't have array either.
>
> Arrays in C (and by extension C++) are most definitely not
> "just pointers". This is a common misconception due to arrays
> decaying to pointers in function calls. There are such things
> as array pointers in C, and C++ adds array references to the
> mix for, in all likelihood, consistency. I haven't met many C
> programmers that know of their existence.
>
>
>> void* ptr; // ok
>> void arr[5]; // error
>>
>> So I guess Walter agrees that void isn't a type then right?
>> You can't have an array to it so that's the deciding factor.
>
> Funnily enough your example here shows how pointers and arrays
> aren't the same thing. The reason you can't have an array of
> "voids" in C is because void has no size and the whole thing is
> nonsensical. It's a good point though that void is treated
> differently in C's type system.
I never said they are the same thing. An array can only (with a
minor exception) be represented by a pointer, if a pointer can't
exist then neither can the array.
More information about the Digitalmars-d
mailing list