On 11/19/2011 8:18 AM, Paavo Helde wrote:
> kyle<> wrote in
> news
:
>
>> Consider following code:
>>
>> int main() {
>> const int& c = int();
>> int& m = const_cast<int&>(c);
>> m = 4;
>> }
>>
>> The object of the snippet is to get a mutable reference to a
>> temporary. This cant be done directly because non-const reference
>> cannot bind to temporary, but we should be OK with casting away
>> constness of reference 'c' since it doesn't actually refer to const
>> object.
>>
>> Temporaries are mutable, so in whole my snippet is legal C++. Am i
>> correct?
>
> Yes, I think you are correct. Another trick to get a mutable reference to
> a temporary is to use a non-const member function. This avoids
> const_cast, but of course lifetime extending by binding to a const
> reference does not work any more:
>
> struct A {
> int m;
> A& Ref() {return *this;}
> };
>
> void f(A& a) {
> a.m = 4;
> }
>
> int main() {
> f( A().Ref() );
> }
>
There is a difference between your example and the OP's. In your
example the temporary is of a class type, and the expression A()
produces an lvalue to begin with.
V
--
I do not respond to top-posted replies, please don't ask