Я хочу использовать автоматическую ссылку на блок собственной матрицы:
#include <Eigen/Dense>
using namespace Eigen;
void foo(MatrixXf& a)
{
auto& a_block = a.block(2, 3, 4, 5);
a_block = MatrixXf::Random(4,5);
}
Это не компилируется с GCC, поскольку a.block(2, 3, 4, 5)
оценивается как временное, тогда как a.block(2, 3, 4, 5) = MatrixXf::Random(4,5);
работает отлично.
С моей точки зрения, это не ожидаемое поведение.Есть ли элегантное решение этой проблемы?Должно ли это считаться запросом ошибки / функции для Eigen?
РЕДАКТИРОВАТЬ:
с использованием auto
вместо auto&
решает проблему!
Вопрос был помеченкак дубликат Ссылка временная в msvc , но она не имеет ничего общего с MSVC.Я также дал понять, что очевидно, что a.block(2, 3, 4, 5)
оценивается как временный.Вопрос был о том, правильно ли это поведение Эйгена.