const_cast problem?

scott snyder snyder@d0sgif.fnal.gov
Tue Nov 25 15:18:00 GMT 1997


hi -

egcs 971122 (i586-pc-linux-gnu) gives warnings on the following source:

-- tc.cc --------------------------------------------------------------------

int*& foo (int const *& x)
{
  return const_cast<int*&> (x);
}

-----------------------------------------------------------------------------

$ gcc -c tc.cc
tc.cc: In function `int *& foo(const int *&)':
tc.cc:4: warning: converting to `int *' from `const int *' discards const
tc.cc:4: warning: initializing non-const `int *&' with `const int *' will use a temporary
tc.cc:4: warning: returning reference to temporary


If the references in this example are changed to pointers (change
all `&''s to `*'), no warnings result.

I think this is incorrect according to CD2 5.2.11, para 4:

4 An  lvalue of type T1 can be explicitly converted to an lvalue of type
  T2 using the cast const_cast<T2&> (where T1 and T2 are  object  types)
  if  a pointer to T1 can be explicitly converted to the type pointer to
  T2 using a const_cast.  The result of a reference const_cast refers to
  the original object.

thanks,
sss



More information about the Gcc-bugs mailing list