Re: Using "this" in a base initializer list?
On May 8, 3:25 pm, "Victor Bazarov" <v.Abaza...@comAcast.net> wrote:
Angel Tsankov wrote:
Hello! Is the following code illformed or does it yield undefined
behaviour:
class a
{};
class b
{
public:
b(a&){}
};
class c: private a, private b
{
public:
c():b(*this){}
};
Neither. The code is fine.
Are you sure? Throw in some virtual inheritance, and it core
dumps with Sun CC. And =A73.8 of the standard explicitly says
that:
Before the lifetime of an object has started but after
the storage which the object will occupy has been
allocated39) or, after the lifetime of an object has
ended and before the storage which the object occupied
is reused or released, any pointer that refers to the
storage location where the object will be or was located
may be used but only in limited ways.[...] If the
object will be or was of a non-POD class type, the
program has undefined behavior if
[...]
-- the pointer is implicitly converted (4.10) to a
pointer to a base class type,
(Quoted from the April, 2006 draft. The only one I have
handy here. But I don't think the text in question has
changed since the original standard.)
I think that there are some special rules concerning the
this pointer, but I can't find them off hand. If you can
find them, and point them out to me, I'd be very happy.
I really want this to be defined.
--
James Kanze (Gabi Software) email: james.kanze@gmail.com
Conseils en informatique orient=E9e objet/
Beratung in objektorientierter Datenverarbeitung
9 place S=E9mard, 78210 St.-Cyr-l'=C9cole, France, +33 (0)1 30 23 00 34