Мы сталкиваемся с ошибками при компиляции с Eigen 3.3.7 (и, возможно, более ранними версиями) с последними версиями GCC 8.2.1, поставляемыми MSYS2.Как ни странно, это происходит только с последними сборками того же пакета (mingw-w64-x86_64-gcc
8.2.1):
- 8.2.1 + 20181123-1: штраф
- 8.2.1 +20181130-1: ошибка
- 8.2.1 + 20181207-1: ошибка
Ошибка:
In file included from C:/Users/donald/msys64/mingw64/include/eigen3/Eigen/SparseCore:50,
from C:/Users/donald/msys64/mingw64/include/eigen3/Eigen/Sparse:26,
from C:/Users/donald/msys64/mingw64/include/eigen3/Eigen/Eigen:2,
from src/registration/transform/search.h:21,
from src/registration/transform/initialiser_helpers.cpp:20:
C:/Users/donald/msys64/mingw64/include/eigen3/Eigen/src/SparseCore/SparseBlock.h: In member function 'Eigen::internal::sparse_matrix_block_impl<SparseMatrixType, BlockRows, BlockCols>::BlockType& Eigen::internal::sparse_matrix_block_impl<SparseMatrixType, BlockRows, BlockCols>::operator=(const BlockType&)':
C:/Users/donald/msys64/mingw64/include/eigen3/Eigen/src/SparseCore/SparseBlock.h:216:33: error: expected primary-expression before '>' token
return operator=<BlockType>(other);
^
Я предполагаю, что это ошибкав пакете GCC, поставляемом MSYS2, а не Eigen (насколько я могу судить, файл SparseBlock.h
некоторое время не менялся).Разные сборки GCC основаны на одном и том же исходном коде?Любая идея, что проблема может быть?
РЕДАКТИРОВАТЬ: вот MCVE:
test.cpp:
#include <Eigen/Eigen>
int main () { return 0; }
скомпилировать с g ++ 8.2.1 (версия 8.2.1 + 20181130-1 или новее - без ошибок с более старой версией):
$ g++ $(pkg-config --cflags eigen3) test.cpp -o test
In file included from C:/Users/donald/msys64/mingw64/include/eigen3/Eigen/SparseCore:50,
from C:/Users/donald/msys64/mingw64/include/eigen3/Eigen/Sparse:26,
from C:/Users/donald/msys64/mingw64/include/eigen3/Eigen/Eigen:2,
from test.cpp:1:
C:/Users/donald/msys64/mingw64/include/eigen3/Eigen/src/SparseCore/SparseBlock.h: In member function 'Eigen::internal::sparse_matrix_block_impl<SparseMatrixType, BlockRows, BlockCols>::BlockType& Eigen::internal::sparse_matrix_block_impl<SparseMatrixType, BlockRows, BlockCols>::operator=(const BlockType&)':
C:/Users/donald/msys64/mingw64/include/eigen3/Eigen/src/SparseCore/SparseBlock.h:216:33: error: expected primary-expression before '>' token
return operator=<BlockType>(other);
^