是否可以在 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 行中可用。
根据 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 行中可用。