https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85823
Bug ID: 85823 Summary: Boost.Tribool fails to compile: error: '(tribool::dummy::nonnull != 0)' is not a constant expression Product: gcc Version: 8.1.1 Status: UNCONFIRMED Keywords: rejects-valid Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: redi at gcc dot gnu.org Target Milestone: --- Reduced from https://github.com/boostorg/logic/pull/5#issuecomment-389965834 struct B { struct dummy { void nonnull() { } }; using safe_bool = void (dummy::*)(); constexpr B() : value(false) {} constexpr B(int) : value(true) {} constexpr operator safe_bool() const { return value ? &dummy::nonnull : 0; } bool value; }; constexpr B operator!(B x) { return x.value ? B() : B(1); } constexpr B tb_f{}; static_assert(!tb_f, ""); tribool.cc:25:15: error: non-constant condition for static assertion static_assert(!tb_f, ""); ^~~~~ tribool.cc:25:25: error: '(B::dummy::nonnull != 0)' is not a constant expression static_assert(!tb_f, ""); ^