https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86493
Casey Carter <Casey at Carter dot net> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |RESOLVED Resolution|--- |INVALID --- Comment #1 from Casey Carter <Casey at Carter dot net> --- [temp.constr.atomic]/3 states: To determine if an atomic constraint is satisfied, the parameter mapping and template arguments are first substituted into its expression. If substitution results in an invalid type or expression, the constraint is not satisfied. Otherwise, the lvalue-to-rvalue conversion is performed if necessary, and E shall be a constant expression of type bool. "E shall be a constant expression" clearly indicates that a substitution that produces a non-constant-expression is ill-formed, rather than causing the constraint not to be satisfied. This is a defect in the language rather than a bug in GCC.