Насколько я понимаю, std::pair
и std::tuple
в основном представляют собой конструкции времени компиляции, которые не требуют какой-либо конкретной поддержки времени выполнения и могут быть реализованы (если это беспорядочно) исключительно с использованием шаблонных конструкций.
Так почему же, когда я #include <tuple>
в своем голом металлическом проекте из стандартной библиотеки arm-none-eabi
C ++, он включает <array>
, который включает <stdexcept>
, который, наконец, включает <string>
, что делает невозможным для меня его включение, поскольку оно затем попадает в заголовки, такие как wchar.h
и bits/postypes.h
, которые не не входит в arm-none-eabi-gcc? Что я делаю неправильно?
Я прекрасно могу использовать std::pair
из <utility>
, но std::tuple
просто не будет работать, если я не отредактирую заголовки стандартной библиотеки C ++, чтобы удалить некорректное включение, что явно неприемлемо.
Является ли это упущением или ограничением, которое эффективно предотвращает использование программ на голом железе совершенно законных частей STL, или я должен делать здесь что-то еще? Нужно ли мне предоставлять свои собственные wchar.h
и другие заголовки ??
Я был бы очень признателен за объяснение того, чего здесь ждут авторы этих заголовков.