Насколько я понимаю, что 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
и другие заголовки ??
Я был бы очень признателен за объяснение того, что авторы этих заголовков ожидают здесь.
Предполагая, что вы хотите скомпилировать для Cortex-M, используйте ARM собственный дистрибутив GCC, ранее назывался GCC-ARM-Embedded. Кортеж отлично работает там.
Кстати, Tuple никогда не был часть СТЛ. Вы, вероятно, хотели сказать Стандартная библиотека C ++.
Других решений пока нет …