Hi all,
Here is code that works exactly as I think it should with g++-2.95, but
not with
g++-4.0/4.1
#include <iostream>
using namespace std;
class parent
{
public:
parent():i(0){}
parent(int i_):i(i_){}
private:
int i;
};
class child : public parent
{
public:
child():parent() {}
child(int i_):parent(i_){}
};
void trace( const parent* const& p_ptr )
{
cout << "trace called on a reference tp pointer @"
<< (void*)&p_ptr << ": pointer = " << (void*)p_ptr << endl;
}
int main( int argc, char** argv )
{
const child c(4);
const child* c_ptr = &c;
const child* const& c_ptr_r = c_ptr;
cout << "Call trace on a reference to pointer @"
<< (void*)&c_ptr_r << ": pointer = " << (void*)c_ptr_r <<
endl;
trace( c_ptr_r );
return 0;
}
Output with g++-2.95 (which I think is right)
Call trace on a reference to pointer @0xbfb43a40: pointer = 0xbfb43a44
trace called on a reference tp pointer @0xbfb43a40: pointer = 0xbfb43a44
Output with g++-4.0 or 4.1
Call trace on a reference to pointer @0xbfac899c: pointer = 0xbfac89a0
trace called on a reference tp pointer @0xbfac89a4: pointer = 0xbfac89a0
which means that the pointer passed by reference to trace has been
copied, just
as if it was passed by value.
If this is a bug, I did not find it in the bug database.
If not, can anybody tell me why ?
Thanks in advance,
Philippe