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; }
                                                     ^~~~~~~

Reply via email to