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