https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107744
Bug ID: 107744 Summary: Error in constant evaluation of dynamic_cast Product: gcc Version: 12.2.1 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: fchelnokov at gmail dot com Target Milestone: --- The following program struct A { constexpr A(); virtual void f() {} bool x; }; struct B : A {}; constexpr A::A() { x = dynamic_cast<B*>(this); } constexpr bool b = B{}.x; is accepted by Clang and MSVC, but GCC prints vague error: <source>:12:24: in 'constexpr' expansion of 'B()' <source>:7:8: in 'constexpr' expansion of '((B*)this)->B::<anonymous>.A::A()' <source>:12:24: error: '((&<anonymous>.B::<anonymous>) != 0)' is not a constant expression 12 | constexpr bool b = B{}.x; Online demo: https://godbolt.org/z/1xdq68aaM