Why can't we define re-assignable const reference variable?

Steven Schveighoffer schveiguy at yahoo.com
Wed Feb 20 06:46:29 PST 2008


"Robert Fraser" wrote
> Sergey Gromov wrote:
>> Steven Schveighoffer wrote:
>>> "Sergey Gromov" wrote
>>>> Please, why invent new syntax ?
>>>>
>>>> const(T) t; // mutable ref to const T
>>>> const{T t;} // const ref to const T, because of transitiviness
>>>>
>>>> This syntax even worked in one of the previous compiler versions!
>>> Yes, this is one of the trials of Walter to see if he could get 
>>> tail-const to work.
>>>
>>> The problem is if T is not a reference/pointer (such as int).  Now:
>>>
>>> const(T) t;
>>> T t;
>>>
>>> are equivalent, which is necessary to make that const system work.  To 
>>> have some variable declared as const(T), and then allow assignment to 
>>> that variable is completely inconsistent with the fundamental usage of 
>>> parentheses.  If you have something defined as f(x), the entirety of x 
>>> should be affected by f.  This is why that system was dropped, as it 
>>> should have been.
>>
>> If you create a generic algorithm which works with T, and declare 
>> something as
>>
>> const(T) t;
>>
>> then you effectively assert that you're going to replace t with different 
>> other Ts, but promise to keep integrity of a referenced T intact, if 
>> anything is referenced at all.  This means that for int, which is not 
>> referencing anything,
>>
>> const(int) t;
>>
>> is completely and safely equivalent to
>>
>> int t;
>>
>> without breaking any contracts of your algorithm.  Please provide an 
>> example where "const(int) x;" absolutely must mean "const int x;" for a 
>> generic algorithm to work properly.
>>
>
> I wasn't aware of tat syntax. Please retract all comments I made in this 
> thread, this is exactly what I was looking for.

Hm... maybe true, but this is not the supported syntax for the current or 
future compilers, so you will be stuck at D 2.004 or something (can't 
remember which one).  Don't retract those comments just yet ;)

-Steve 





More information about the Digitalmars-d mailing list