Почему GSL-Lite пытается включить <array>? - PullRequest
0 голосов
/ 19 июня 2019

Я пытаюсь использовать gsl внутри моего встроенного проекта STM32 Keil. В моем проекте Keil самое большее используется устаревший полу с ++ 11 компилятор. (Это ограничение наложено на меня моей библиотекой ST для LoRaWAN). Я использую V5.06 обновление 6 (сборка 750) ARM Compiler в комплекте с keil. Кейл решил не реализовывать std::aray STL. Я очень разочарован этим, но эй ват, я могу сделать.

Я выбрал gsl-Lite . Он должен быть совместим с C++98 и C++03. Так что std::array не требуется, но когда я пытаюсь скомпилировать мой код с библиотекой, включенной в мой путь включения, я получаю это сообщение сборки:

.. \ Core \ inc \ gsl / gsl-lite.hpp (405): ошибка: # 5: не удается открыть исходный входной файл "массив": такого файла или каталога нет
# include <array>

Но строка 404 начинается с этого фрагмента кода:

#if gsl_HAVE( ARRAY )
# include <array>
#endif

Мне кажется, они пытаются определить, можно ли включить <array>. Мой редактор скрывает этот блок, как будто он не был определен.

gsl_HAVE определяется как:

#define gsl_HAVE(             feature )  ( gsl_HAVE_##feature )

Я не понимаю, как это работает и как я могу проверить, правильно ли был определен ARRAY.

Я не хочу включать <array>, чтобы мой код мог собирать и использовать gsl-lite. Мой предпочтительный вариант - это что-то с определением.

обновление

Насколько я понимаю, система include:

#define gsl_HAVE_ARRAY                  gsl_CPP11_110

Определяется для автоматического исключения функции (в данном случае gsl_HAVE_ARRAY), когда

#define gsl_CPP11_OR_GREATER  ( gsl_CPLUSPLUS >= 201103L )

Оценивается как истинное. gsl_CPLUSPLUS определяется как

#  define gsl_CPLUSPLUS  __cplusplus

Но я не могу понять значение __cplusplus.

1 Ответ

0 голосов
/ 19 июня 2019

Я думаю, что моя проблема в том, что _cplusplus не имеет значения, потому что Кейл не добавляет его. Даже когда я объявил gsl_CPLUSPLUS как 199711L, это не сработало, потому что компилятор не смог delete a gsl::owner<int *>, потому что ожидал пустой указатель.

Похоже, что компилятор слишком стар для обработки gsl.

...