https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108243
--- Comment #2 from Jonathan Wakely <redi at gcc dot gnu.org> --- Reduced: struct traits { static constexpr unsigned long length(const char* s) { if (__builtin_is_constant_evaluated()) { unsigned long n = 0; while (*s++) ++n; return n; } return __builtin_strlen(s); } }; struct string_view { constexpr string_view(const char* s) : str(s), len(traits::length(s)) { } unsigned long size() const { return len; } const char* str; unsigned long len; }; int main() { static const string_view foo("bar"); return foo.size(); } GCC should really be able to optimize this.