// test that assumed constexpr contracts that reference defined entities, or // undefined entities in unevaluated context, cause constexpr eval failure when // the predicate is constexpr false // { dg-do compile } // { dg-options "-std=c++2a -fcontracts" } constexpr int f(int t) { return -1; } constexpr int dummy() { [[ assert assume: f(1) > 0 ]]; return -1; } constexpr int undef(int t); constexpr int dummy2() { [[ assert assume: sizeof(decltype(undef(1))) < 0 ]]; return -1; } int main() { constexpr int n = dummy(); // { dg-message "in .constexpr. expansion" } // { dg-error "contract predicate" "" { target *-*-* } 14 } constexpr int m = dummy2(); // { dg-message "in .constexpr. expansion" } // { dg-error "contract predicate" "" { target *-*-* } 22 } return 0; }