Согласно cppreference, std::string_view::operator==
является constexpr. У меня возникли проблемы с поиском ситуации, чтобы это было верно при реализации текущей библиотеки.
Вот что я пробовал:
#include <string_view>
constexpr char x0[] = "alpha";
constexpr char y0[] = "alpha";
constexpr auto x = std::string_view(x0, 5);
constexpr auto y = std::string_view(y0, 5);
constexpr auto a = std::string_view("alpha", 5);
constexpr auto b = std::string_view("alpha", 5);
int main()
{
// a, b, x, y are all constexpr, operator== is constexpr
// therefore I expected this to compile:
static_assert(x == y);
static_assert(a == b);
}
С gcc-trunk это не скомпилируется, потому что в libstdС++ оператор == не является constexpr вообще.
С clang-trunk это также терпит неудачу, потому что оператор ==() объявлен constexpr, но использует char_traits:: compare(), который не является constexpr.
Являются ли эти ошибки в стандартных библиотеках? Или мои ожидания ошибочны?
Если мои ожидания ошибочны, то как я могу построить string_view, который может быть constexpr-compare?