将 std::from_chars 与 g++-10.2.1 一起使用时出错

问题描述 投票:0回答:1

因此,不幸的是,我无法重现该错误,因为它似乎在较新的 g++ 版本中已修复,但我无法编译以下代码

#include <charconv>
#include <concepts>
#include <optional>
#include <string_view>

template<std::floating_point T>
std::optional<T> to_float(std::string_view s)
{
    T value;
    if (std::from_chars(s.data(), s.data() + s.size(), value).ec == std::errc{})
        return value;
    return {};
}
  
int main()
{
    to_float<float>("0");
    return 0;
}

它会产生以下错误:

在‘std::可选<_Tp> to_float(std::string_view) 的实例化中 [其中 T = 浮动; std::string_view = std::basic_string_view]': main.cpp:633:92:这里需要 main.cpp:36:24:错误:否 调用的匹配函数 ‘from_chars(std::basic_string_view::const_pointer, std::basic_string_view::const_pointer, float&)’ 36 |如果 (std::from_chars(s.data(), s.data() + s.size(), value).ec == std::errc{}) | ~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~ 在 main.cpp:25: /usr/include/c++/10/charconv:595:5 包含的文件中: 注意:候选人:'模板 std::__detail::__integer_from_chars_result_type<_Tp> std::from_chars(const char*, const char*, _Tp&, int)’ 595 |
from_chars(const char* __first, const char* __last, _Tp& __value, | ^~~~~~~~~~ /usr/include/c++/10/charconv:595:5: 注意:模板参数推导/替换失败:包含在文件中 /usr/include/c++/10/bits/move.h:57, 来自/usr/include/c++/10/bits/stl_pair.h:59, 来自/usr/include/c++/10/bits/stl_algobase.h:64, 来自/usr/include/c++/10/vector:60:/usr/include/c++/10/type_traits:使用enable_if_t = typename std::enable_if::type 替换‘template [with bool _Cond = false; _Tp = std::from_chars_result]’: /usr/include/c++/10/charconv:584:11:需要替换 '使用 __integer_from_chars_result_type = 的模板 std::enable_if_toror::类型,签名字符>, std::is_same

::类型,短整型>,std::is_same::类型,整型>,std::is_same::类型,长整型>, std::is_same>、std::_::类型、无符号字符>、 std::is_same、std::is_same::类型、无符号整型>、std::is_same::类型、长无符号整型>、 std::is_same >, std::is_same::type>>::value, std::from_chars_result> [with _Tp = float]’ /usr/include/c++/10/charconv:595:5:需要替换 '模板 std::__detail::__integer_from_chars_result_type<_Tp> std::from_chars(const char*, const char*, _Tp&, int) [其中 _Tp = float]' main.cpp:36:24:需要从'std::可选<_Tp> to_float(std::string_view) [其中 T = float; std::string_view = std::basic_string_view]’ main.cpp:633:92:此处需要 /usr/include/c++/10/type_traits:2554:11:错误:没有名为“type”的类型 在‘struct std::enable_if’中 2554 |
使用enable_if_t =类型名称enable_if<_Cond, _Tp>::type;

我正在使用

g++ version
g++ (Debian 10.2.1-6) 10.2.1 20210110
。我有什么想法可以解决这个问题吗?遗憾的是,无法使用较新的 g++ 版本。

g++ c++20
1个回答
0
投票

std::from_chars
的浮点重载仅从版本 11 开始在 libstdc++ 中实现。

请参阅 https://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html。寻找“P0067R5”。

© www.soinside.com 2019 - 2024. All rights reserved.