C++ Обновление стандартной библиотеки в MacOS

Возможно я чего-то не понимаю, но я нигде не могу найти информацию об обновлении стандартной библиотеки С++ в целом, а тем более на macos. Суть проблемы следующая: У меня был установлен компилятор clang по умолчанию. Пользуюсь Macbook Pro M1 2021. Версия ОС: 13.6.2 (22G320). В качестве IDE использую vscode с компиляцией с помощью задач tasks.json либо с помощью терминала.

clang изначально был 14 версии. Я с официального сайта apple установил новый пакет command line tools 15. (хочется добавить, что xcode-select --install у меня не работало с сообщением command line tools are already installed, use "Software Update" in System Settings to install updates. В настройках на макоси никаких обновлений command line tools я не нашел, только обновление на macos sonoma, но по некоторым причинам я не могу обновить ее в данный момент. https://download.developer.apple.com/Developer_Tools/Command_Line_Tools_for_Xcode_15/Command_Line_Tools_for_Xcode_15.dmg

До установки и после при вводе команды xcode-select -v выводилось это: xcode-select version 2397. После переустановки command line tools 15 команда clang++ -v стала выводить

Apple clang version 15.0.0 (clang-1500.0.40.1)
Target: arm64-apple-darwin22.6.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin

Однако версия библиотеки осталась прежней. В частности меня интересует chrono и ее описание на cppreference. Там приведен пример

#include <chrono>
#include <iostream>
 
long fibonacci(unsigned n)
{
    return n < 2 ? n : fibonacci(n - 1) + fibonacci(n - 2);
}
 
int main()
{
    const auto start{std::chrono::steady_clock::now()};
    const auto fb{fibonacci(42)};
    const auto end{std::chrono::steady_clock::now()};
    const std::chrono::duration<double> elapsed_seconds{end - start};
 
    std::cout << "fibonacci(42): " << fb << '\n' << "прошедшее время: ";
//  std::cout << elapsed_seconds.count() << "s\n"; // До C++20
    std::cout << elapsed_seconds << '\n'; // chrono::duration operator<< в C++20
}

Начиная с C++20 должен быть перегружен оператор << у шаблона класса chrono::duration operator<<. Однако у меня этот код не работает, также при проверке макросом __cpp_lib_chrono в консоль выводится 201611.

Как можно обновить саму библиотеку?

Второй вопрос заключается в том, что при компиляции файла командой в терминале /Library/Developer/CommandLineTools/usr/bin/clang++ -Wall -std=gnu++2b main.cpp MQTimer.cpp -o /main Возникает проблема такого рода

/Library/Developer/CommandLineTools/usr/bin/../include/c++/v1/ctime:49:10: fatal error: 'time.h' file not found

Однако при компиляции с путём /usr/bin/clang++ таких проблем не возникает и всё компилируется. Объясните пожалуйста почему так, если при вводе в терминал clang++ -v выводится installed Dir: /Library/Developer/CommandLineTools/usr/bin.

Буду рад любой помощи или ссылок, где я могу вычитать информацию. Спасибо большое за ответ на тупые вопросы!)


Ответы (0 шт):