Hello UB-Experts,

 

as far as I can see the following (static_cast) is UB:

 

struct B {

  int i;

};

 

struct D : B {

  void foo() { /* access B::i */ }

};

 

B b;

static_cast<D&>(b).foo();

 

because of [expr.static.cast] clause 11

 

first question: is my assessment of the situation correct or is this use legal?

if it is not (legal): could we make it legal or would we run afoul of the aliasing rules?

 

best regards

 

Fabio

--
Fabio Fracassi | ffracassi@think-cell.com
Software Engineer



think-cell Sales GmbH & Co. KG http://www.think-cell.com
Chausseestr. 8/E phone / fax +49 30 666473-10 / -19
10115 Berlin, Germany US phone / fax +1 800 891 8091 / +1 212 504 3039
Amtsgericht Berlin-Charlottenburg, HRA 44531 | European Union VAT Id DE815233792
General partner: think-cell Operations GmbH | Amtsgericht Berlin-Charlottenburg, HRB 129917
Directors: Dr. Markus Hannebauer, Dr. Arno Schödl