Incompatibility with resolv.h
Projects including an eigen3 header after including resolv.h directly or indirectly (eg. via httplib) will fail to compile because the _res define from resolv.h will apply to multiple argument names _res in eigen3 headers.
For example compilation of
#include <resolv.h>
// #undef _res
#include <Eigen/Dense>
int main() { return 0; }
will lead to
In file included from /usr/include/eigen3/Eigen/Core:338,
from /usr/include/eigen3/Eigen/Dense:1,
from /work/main.cpp:3:
/usr/include/eigen3/Eigen/src/Core/products/SelfadjointMatrixMatrix.h:343:24: error: no declaration matches 'void Eigen::internal::product_selfadjoint_matrix<Scalar, Index, LhsStorageOrder, true, ConjugateLhs, RhsStorageOrder, false, ConjugateRhs, 0, ResInnerStride>::run(Index, Index, const Scalar*, Index, const Scalar*, Index, Scalar** (*)(), Index, Index, const Scalar&, Eigen::internal::level3_blocking<Scalar, Scalar>&)'
343 | EIGEN_DONT_INLINE void product_selfadjoint_matrix<Scalar,Index,LhsStorageOrder,true,ConjugateLhs, RhsStorageOrder,false,ConjugateRhs,ColMajor,ResInnerStride>::run(
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/eigen3/Eigen/src/Core/products/SelfadjointMatrixMatrix.h:331:33: note: candidate is: 'static void Eigen::internal::product_selfadjoint_matrix<Scalar, Index, LhsStorageOrder, true, ConjugateLhs, RhsStorageOrder, false, ConjugateRhs, 0, ResInnerStride>::run(Index, Index, const Scalar*, Index, const Scalar*, Index, Scalar*, Index, Index, const Scalar&, Eigen::internal::level3_blocking<Scalar, Scalar>&)'
331 | static EIGEN_DONT_INLINE void run(
| ^~~
/usr/include/eigen3/Eigen/src/Core/products/SelfadjointMatrixMatrix.h:328:8: note: 'struct Eigen::internal::product_selfadjoint_matrix<Scalar, Index, LhsStorageOrder, true, ConjugateLhs, RhsStorageOrder, false, ConjugateRhs, 0, ResInnerStride>' defined here
328 | struct product_selfadjoint_matrix<Scalar,Index,LhsStorageOrder,true,ConjugateLhs, RhsStorageOrder,false,ConjugateRhs,ColMajor,ResInnerStride>
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/eigen3/Eigen/src/Core/products/SelfadjointMatrixMatrix.h:438:24: error: no declaration matches 'void Eigen::internal::product_selfadjoint_matrix<Scalar, Index, LhsStorageOrder, false, ConjugateLhs, RhsStorageOrder, true, ConjugateRhs, 0, ResInnerStride>::run(Index, Index, const Scalar*, Index, const Scalar*, Index, Scalar** (*)(), Index, Index, const Scalar&, Eigen::internal::level3_blocking<Scalar, Scalar>&)'
438 | EIGEN_DONT_INLINE void product_selfadjoint_matrix<Scalar,Index,LhsStorageOrder,false,ConjugateLhs, RhsStorageOrder,true,ConjugateRhs,ColMajor,ResInnerStride>::run(
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/eigen3/Eigen/src/Core/products/SelfadjointMatrixMatrix.h:426:33: note: candidate is: 'static void Eigen::internal::product_selfadjoint_matrix<Scalar, Index, LhsStorageOrder, false, ConjugateLhs, RhsStorageOrder, true, ConjugateRhs, 0, ResInnerStride>::run(Index, Index, const Scalar*, Index, const Scalar*, Index, Scalar*, Index, Index, const Scalar&, Eigen::internal::level3_blocking<Scalar, Scalar>&)'
426 | static EIGEN_DONT_INLINE void run(
| ^~~
/usr/include/eigen3/Eigen/src/Core/products/SelfadjointMatrixMatrix.h:423:8: note: 'struct Eigen::internal::product_selfadjoint_matrix<Scalar, Index, LhsStorageOrder, false, ConjugateLhs, RhsStorageOrder, true, ConjugateRhs, 0, ResInnerStride>' defined here
423 | struct product_selfadjoint_matrix<Scalar,Index,LhsStorageOrder,false,ConjugateLhs, RhsStorageOrder,true,ConjugateRhs,ColMajor,ResInnerStride>
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /usr/include/eigen3/Eigen/Core:342:
/usr/include/eigen3/Eigen/src/Core/products/TriangularMatrixMatrix.h:109:24: error: no declaration matches 'void Eigen::internal::product_triangular_matrix_matrix<Scalar, Index, Mode, true, LhsStorageOrder, ConjugateLhs, RhsStorageOrder, ConjugateRhs, 0, ResInnerStride, Version>::run(Index, Index, Index, const Scalar*, Index, const Scalar*, Index, Scalar** (*)(), Index, Index, const Scalar&, Eigen::internal::level3_blocking<Scalar, Scalar>&)'
109 | EIGEN_DONT_INLINE void product_triangular_matrix_matrix<Scalar,Index,Mode,true,
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
110 | LhsStorageOrder,ConjugateLhs,
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
111 | RhsStorageOrder,ConjugateRhs,ColMajor,ResInnerStride,Version>::run(
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/eigen3/Eigen/src/Core/products/TriangularMatrixMatrix.h:97:33: note: candidate is: 'static void Eigen::internal::product_triangular_matrix_matrix<Scalar, Index, Mode, true, LhsStorageOrder, ConjugateLhs, RhsStorageOrder, ConjugateRhs, 0, ResInnerStride, Version>::run(Index, Index, Index, const Scalar*, Index, const Scalar*, Index, Scalar*, Index, Index, const Scalar&, Eigen::internal::level3_blocking<Scalar, Scalar>&)'
97 | static EIGEN_DONT_INLINE void run(
| ^~~
/usr/include/eigen3/Eigen/src/Core/products/TriangularMatrixMatrix.h:85:8: note: 'struct Eigen::internal::product_triangular_matrix_matrix<Scalar, Index, Mode, true, LhsStorageOrder, ConjugateLhs, RhsStorageOrder, ConjugateRhs, 0, ResInnerStride, Version>' defined here
85 | struct product_triangular_matrix_matrix<Scalar,Index,Mode,true,
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
86 | LhsStorageOrder,ConjugateLhs,
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
87 | RhsStorageOrder,ConjugateRhs,ColMajor,ResInnerStride,Version>
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/eigen3/Eigen/src/Core/products/TriangularMatrixMatrix.h:267:24: error: no declaration matches 'void Eigen::internal::product_triangular_matrix_matrix<Scalar, Index, Mode, false, LhsStorageOrder, ConjugateLhs, RhsStorageOrder, ConjugateRhs, 0, ResInnerStride, Version>::run(Index, Index, Index, const Scalar*, Index, const Scalar*, Index, Scalar** (*)(), Index, Index, const Scalar&, Eigen::internal::level3_blocking<Scalar, Scalar>&)'
267 | EIGEN_DONT_INLINE void product_triangular_matrix_matrix<Scalar,Index,Mode,false,
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
268 | LhsStorageOrder,ConjugateLhs,
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
269 | RhsStorageOrder,ConjugateRhs,ColMajor,ResInnerStride,Version>::run(
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/eigen3/Eigen/src/Core/products/TriangularMatrixMatrix.h:255:33: note: candidate is: 'static void Eigen::internal::product_triangular_matrix_matrix<Scalar, Index, Mode, false, LhsStorageOrder, ConjugateLhs, RhsStorageOrder, ConjugateRhs, 0, ResInnerStride, Version>::run(Index, Index, Index, const Scalar*, Index, const Scalar*, Index, Scalar*, Index, Index, const Scalar&, Eigen::internal::level3_blocking<Scalar, Scalar>&)'
255 | static EIGEN_DONT_INLINE void run(
| ^~~
/usr/include/eigen3/Eigen/src/Core/products/TriangularMatrixMatrix.h:244:8: note: 'struct Eigen::internal::product_triangular_matrix_matrix<Scalar, Index, Mode, false, LhsStorageOrder, ConjugateLhs, RhsStorageOrder, ConjugateRhs, 0, ResInnerStride, Version>' defined here
244 | struct product_triangular_matrix_matrix<Scalar,Index,Mode,false,
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
245 | LhsStorageOrder,ConjugateLhs,
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
246 | RhsStorageOrder,ConjugateRhs,ColMajor,ResInnerStride,Version>
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Related: https://github.com/yhirose/cpp-httplib/issues/1350
Please rename these function parameter names to not clash with glibc defines.
Edited by Tobias Preclik