использование std :: экспериментальный :: необязательный с g ++ v8.2.0 - PullRequest
0 голосов
/ 22 октября 2018

То, что когда-то называлось std::experimental::optional, теперь известно как std::optional в C ++ 17.

Но некоторые библиотеки, такие как libpqxx, еще не были обновлены для удаления experimental namespace.

Итак, теперь с новой версией Ubuntu 18.10, которая поставляется с g ++ v8.2.0, попытка скомпилировать проекты, использующие libpqxx, приводит к таким ошибкам:

/usr/include/pqxx/internal/statement_parameters.hxx:213:13: error: ‘experimental’ in namespace ‘std’ does not name a type
  const std::experimental::optional<Arg> &arg)
             ^~~~~~~~~~~~
/usr/include/pqxx/internal/statement_parameters.hxx:213:35: error: expected unqualified-id before ‘<’ token
  const std::experimental::optional<Arg> &arg)
                                   ^
/usr/include/pqxx/internal/statement_parameters.hxx:213:35: error: expected ‘)’ before ‘<’ token
  const std::experimental::optional<Arg> &arg)
                                   ^
                                   )

Есть ли какой-нибудь флаг, который я могу передать g ++, чтобы он определял это старое experimental пространство имен?

Это соответствующие номера версий в Ubuntu 18.10:

> dpkg -l | egrep "libpqxx|g\+\+"
ii  g++             4:8.2.0-1ubuntu1       amd64        GNU C++ compiler
ii  g++-8           8.2.0-7ubuntu1         amd64        GNU C++ compiler
ii  libpqxx-6.2     6.2.4-4                amd64        C++ library to connect to PostgreSQL
ii  libpqxx-dev     6.2.4-4                amd64        C++ library to connect to PostgreSQL (development files)

1 Ответ

0 голосов
/ 23 октября 2018

Как отметил @cpplearner в комментарии выше, в libpqxx есть макрос (PQXX_HIDE_EXP_OPTIONAL), который можно определить до включения заголовочных файлов pqxx.Это скорее временный обходной путь, чем решение, но в моем случае это позволило мне обойти ошибку и поработать над необходимым мне кодом.

Это определение, которое я добавил в свой файл cmake:

ADD_DEFINITIONS ( -DPQXX_HIDE_EXP_OPTIONAL )
...