Неустранимая ошибка: файл '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.4. может сработает, спасибо.

обновлятьgccверсия для8.3, похоже, что старая версия gcc вызывает проблемы

Другие вопросы по тегам