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

Robert Fraser fraserofthenight at gmail.com
Wed Feb 20 06:33:32 PST 2008


Sergey Gromov wrote:
> Steven Schveighoffer <schveiguy at yahoo.com> 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.



More information about the Digitalmars-d mailing list