Неустранимая ошибка: файл 'charconv' не найден в clang 6.0 с -std= C++17
Недавно я хотел использовать from_chars
из с ++17. Посмотрел http://en.cppreference.com/w/cpp/utility/from_chars и нашел этот код на этой странице:
#include <iostream>
#include <charconv>
#include <array>
int main()
{
std::array<char, 10> str{"42"};
int result;
std::from_chars(str.data(), str.data()+str.size(), result);
std::cout << result;
}
не может быть скомпилирован ни одним из компиляторов. Я пробовал на странице http://en.cppreference.com/w/cpp/utility/from_chars и на Godbolt с разными компиляторами, но все они возвращали одну и ту же ошибку:
<source>:2:10: fatal error: 'charconv' file not found
#include <charconv>
^~~~~~~~~~
1 error generated.
Compiler returned: 1
Кто-нибудь может мне помочь с этим, пожалуйста?
(Я попробовал clang 6.0, gcc 7.3 и msvc 19, но все они вернули ошибку, которую 'charconv' не нашел)
3 ответа
Согласно странице статуса GCC libstdC++, этот заголовок поддерживается только начиная с GCC-8.1. Вы можете либо избежать использования этого заголовка, обнаружив его:
#if __has_include(<charconv>)
#include <charconv>
#else
/* implement some fallback */
#endif
Или просто обновите свой компилятор. Этот пример Godbolt подтверждает, что заголовок присутствует в GCC-8.1.
Если вы используете Clang, помните, что Clang использует GCC
stdlibc++
по умолчанию. Вам нужно будет либо обновить свой GCC, либо переключиться на Clang
libc++
по:
clang++ -std=c++17 -stdlib=libc++ main.cpp
обновлятьgcc
версия для8.3
, похоже, что старая версия gcc вызывает проблемы