Why can't we define re-assignable const reference variable?
    Sergey Gromov 
    snake.scaly at gmail.com
       
    Wed Feb 20 00:51:20 PST 2008
    
    
  
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.
-- 
SnakE
    
    
More information about the Digitalmars-d
mailing list