Paolo Bonzini <paolo.bonz...@gmail.com> writes: >> Presumably the early return is OK within a sizeof expression; it is OK >> within an expression like (0 ? x : y)? > > From reading the code, I'd say yes. The bug that Jason fixed is > related to stuff that cannot appear within a constant expression > except within sizeof -- for example > > struct B {}; > struct D : public B { > static const int i = sizeof((B*)(D*)0); > }; > > struct Z {}; > struct A : Z {}; > Z* implicitToZ (Z*); > struct B : A { > static const int i = sizeof(implicitToZ((B*)0)); > }; > > struct B {}; > struct D; > D* p; > struct D: public B { > static const int i = sizeof ((B*)p); > }; > > (see PR27177). All of these would still be forbidden within (0?x:y).
OK, but should they perhaps give an error which would perhaps not be given if skip_evaluation is true? Ian