То, что когда-то называлось 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)