在 g++ v8.2.0 中使用 std::experimental::optional
use of std::experimental::optional with g++ v8.2.0
曾经被称为 std::experimental::optional
的东西现在在 C++17 中被称为 std::optional
。
但是一些库(例如 libpqxx)尚未更新以删除 experimental
命名空间。
所以现在使用 g++ v8.2.0 附带的新版本 Ubuntu 18.10,尝试编译使用 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)
正如@cpplearner 在上面的评论中指出的那样,libpqxx 有一个宏 (PQXX_HIDE_EXP_OPTIONAL
),您可以在包含 pqxx 头文件之前定义它。更多的是临时解决方法而不是解决方案,但就我而言,它允许我克服错误并处理我需要的代码。
这是我添加到我的 cmake 文件中的定义:
ADD_DEFINITIONS ( -DPQXX_HIDE_EXP_OPTIONAL )
曾经被称为 std::experimental::optional
的东西现在在 C++17 中被称为 std::optional
。
但是一些库(例如 libpqxx)尚未更新以删除 experimental
命名空间。
所以现在使用 g++ v8.2.0 附带的新版本 Ubuntu 18.10,尝试编译使用 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)
正如@cpplearner 在上面的评论中指出的那样,libpqxx 有一个宏 (PQXX_HIDE_EXP_OPTIONAL
),您可以在包含 pqxx 头文件之前定义它。更多的是临时解决方法而不是解决方案,但就我而言,它允许我克服错误并处理我需要的代码。
这是我添加到我的 cmake 文件中的定义:
ADD_DEFINITIONS ( -DPQXX_HIDE_EXP_OPTIONAL )