https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78420
--- Comment #22 from Jason Merrill <jason at gcc dot gnu.org> ---
Hmm, this seems to work:
typedef decltype(sizeof(1)) size_t;
constexpr bool less (const int*a, const int*b)
{
if (__builtin_constant_p (a < b))
return a < b;
return (size_t)a < (size_t)b;
}
int ar[3];
int i;
constexpr bool l1 = less(&ar[0], &ar[1]); // OK
constexpr bool l2 = less(&ar[0], &i); // error, non-constant
