是否可以在 GCC 8 之前的常量表达式中使用 std::char_traits<char>?

Is it possible to use std::char_traits<char> in constant expressions before GCC 8?

根据 GCC 8 Release Note,现在可以在常量表达式中使用 std::char_traits<char>std::char_traits<wchar_t>

  • Improved experimental support for C++17, including the following features:
    • std::char_traits and std::char_traits<wchar_t> are usable in constant expressions.

我在这里的理解是你不能在 GCC 8 之前的常量表达式中使用 std::char_traits<char>

但是,下面的代码在 GCC 7.5 下编译得很好:

#include <string_view>

int main() {
    constexpr std::string_view sv{""};
    constexpr std::size_t size = std::char_traits<char>::length(sv.data());

    return 0;
}

那么,在 GCC 8 之前的常量表达式中可以使用 std::char_traits 吗?还是我遗漏了什么?

这项改进是 backported from mainline。从 7.3 开始,它在 gcc 7 行中可用。