Как я могу получить c 20 std lib?

#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 огромны, и нет смысла откладывать все функции до тех пор, пока все не будет сделано. Это называется «экспериментальной» поддержкой нового стандарта.