https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71962
Bug ID: 71962 Summary: error: ‘((& x) != 0u)’ is not a constant expression Product: gcc Version: 6.1.1 Status: UNCONFIRMED Keywords: rejects-valid Severity: normal Priority: P3 Component: sanitizer Assignee: unassigned at gcc dot gnu.org Reporter: redi at gcc dot gnu.org CC: dodji at gcc dot gnu.org, dvyukov at gcc dot gnu.org, jakub at gcc dot gnu.org, kcc at gcc dot gnu.org Target Milestone: --- struct P { constexpr P(const int* p) : p(p) { } const int* p; explicit constexpr operator bool() const { return (bool)p; } }; int main() { static constexpr int x{1}; constexpr P p{&x}; static_assert((bool)p, ""); } This valid program is rejected when ubsan is used: $ g++ ubsan.cc -fsanitize=undefined ubsan.cc: In function ‘int main()’: ubsan.cc:10:3: error: non-constant condition for static assertion static_assert((bool)p, ""); ^~~~~~~~~~~~~ ubsan.cc:4:53: error: ‘((& x) != 0u)’ is not a constant expression explicit constexpr operator bool() const { return (bool)p; } ^~~~~~~