Я получаю утверждения выравнивания времени выполнения с Eigen 3.3.7, компилируемые с g cc версии 9.3 и -std=c++17 -O0
.
#include <Eigen/Dense>
struct axis_result // <-- Asserting from here
{
...
double cal_maximum_time;
Eigen::Vector2d unit_vector;
bool has_error;
...
};
class cal_axis_diagnostics
{
...
public:
cal_axis_diagnostics() {} // <- In stack-frame
...
private:
...
axis_result axis_;
...
};
int main(int argc, char** argv)
{
...
auto cal = new cal_axis_diagnostics(); // <- In stack-frame
...
}
Утверждение времени выполнения указывает мне на http://eigen.tuxfamily.org/dox-devel/group__TopicStructHavingEigenMembers.html, в котором говорится, что проблема должна исчезнуть с достаточно свежим компилятором (G CC> = 7 с C ++ 17). Очевидно, это не мой случай. 1016 * классам, имеющим axis_result
членов.
Есть предложения?
Изменить: Я выяснил, что неявное построение axis_
(которое содержит тип Eigen
) вызывает проблему. Каким-то образом G CC обходит механизмы выравнивания Eigen, если разрешено неявное построение axis_
. Явное добавление axis_
в список инициализаторов устраняет проблему:
class cal_axis_diagnostics
{
...
public:
cal_axis_diagnostics()
: axis_{} // <- Note explicit construction
// of axis_ in initializer list
{}
...
private:
...
axis_result axis_;
...
};