#c #compiler-errors #c 20
#c #ошибки компилятора #c 20
Вопрос:
Как мне получить sys_seconds? Я использую /usr/bin/c в Ubuntu 20.04 для компиляции следующего фрагмента:
RCLCPP_WARN_STREAM(get_logger(), "Time: " << std::chrono::sys_seconds(time_.seconds()));
и я получаю следующую ошибку: ошибка: ‘sys_seconds’ не является членом ‘std:: chrono’;
вывод c — это:
c (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0
В соответствии с: https://en.cppreference.com/w/cpp/chrono/system_clock c 20 должен иметь пространство имен sys_seconds, согласно https://en.cppreference.com/w/cpp/compiler_support c 9 поддерживает c 20. Но когда я проверяю файл /usr/include/c /9/chrono, я вижу только версию c 11. Я удостоверяюсь, что я компилирую с c 20, установив следующую строку в моем CMakeLists.txt
set(CMAKE_CXX_STANDARD 20)
Как я могу получить недостающую библиотеку c 20 std?
Комментарии:
1. Здесь есть предварительный просмотр C 20 chrono: github.com/HowardHinnant/date
2. Я пытался заставить это сработать, но потерпел неудачу. Я уже не помню почему, но теперь я нашел другое решение. Это безумие, что легенды отвечают на SO 😉
3. Если вам нужна помощь в ее запуске, просто дайте мне знать.
Ответ №1:
согласно https://en.cppreference.com/w/cpp/compiler_support c 9 поддерживает c 20
Это не то, что написано на связанной странице. В вашей системе c по умолчанию связан с g . На связанной странице говорится, что некоторые функции C 20 реализованы в GCC 9, в то время как многие функции — нет.
Как я могу получить недостающую библиотеку c 20 std?
Установив языковую реализацию, в которой реализована эта библиотека.
Комментарии:
1. Хорошо, хорошо. Мне кажется странной концепция поддержки только части нового стандарта. Обычно вещи, с которыми я сталкиваюсь, поддерживают что-то или нет. Я не знал, что компиляторы иногда поддерживают только подмножества нового стандарта.
2. @Hakaishin Стандартные изменения в C огромны, и нет смысла откладывать все функции до тех пор, пока все не будет сделано. Это называется «экспериментальной» поддержкой нового стандарта.