Summary: | wrongly calling _init1<T>() | ||||||
---|---|---|---|---|---|---|---|
Product: | Eigen | Reporter: | cDc <cdc.seacave> | ||||
Component: | Core - expression templates | Assignee: | Nobody <eigen.nobody> | ||||
Status: | RESOLVED FIXED | ||||||
Severity: | Compilation Problem | CC: | chtz, gael.guennebaud, jacob.benoit.1 | ||||
Priority: | Normal | ||||||
Version: | 3.3 (current stable) | ||||||
Hardware: | All | ||||||
OS: | All | ||||||
Whiteboard: | |||||||
Bug Depends on: | |||||||
Bug Blocks: | 558 | ||||||
Attachments: |
|
You can workaround with Eigen::Matrix<TYPE,3,1> eX = X; and the fix for the devel branch is there: https://bitbucket.org/eigen/eigen/commits/e6ef61a3bd12/ Summary: Bug 1393: enable Matrix/Array explicit ctor from types with conversion operators (was ok with 3.2) I'll wait a bit before backporting. Thank you for the fast fix! I can confirm that this error is solved now (at least in my library). I see it is quite e big fix, so I understand your precaution. Now however I get a ton of warnings as no param is used for the macro you just added: ``` warning C4003: not enough actual parameters for macro 'EIGEN_INTERNAL_DENSE_STORAGE_CTOR_PLUGIN' ``` Could you please use __VA_ARGS__ instead of X in order to fix this warning? I get other errors now from upgrading from 3.2.11 to 3.3 (default), but I guess I should open a different bug report. Thanks! Regarding the warnings, I prefer tot to rely on variadic macros. BLA_BLA({}) does the job. -- GitLab Migration Automatic Message -- This bug has been migrated to gitlab.com's GitLab instance and has been closed from further activity. You can subscribe and participate further through the new bug through this link to our GitLab instance: https://gitlab.com/libeigen/eigen/issues/1393. |
Created attachment 776 [details] code to reproduce the error Not able to use a custom structure, that exposes an operator to access it as an Eigen matrix, as a Eigen type. Please see the simple example attached. The compilation failes with VC2015 with the following message: ``` 1>d:\pro\lib\eigen\eigen\src\core\matrix.h(296): error C2664: 'void Eigen::PlainObjectBase<Eigen::Matrix<double,3,1,0,3,1>>::_init1<T>(const double *)': cannot convert argument 1 from 'const TPoint3<TYPE>' to 'Eigen::EigenBase<Derived>::Index' 1> with 1> [ 1> T=TPoint3<TYPE> 1> ] 1> and 1> [ 1> Derived=Eigen::Matrix<double,3,1,0,3,1> 1> ] 1> d:\pro\lib\eigen\eigen\src\core\matrix.h(296): note: No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called 1> d:\pro\src\consoleapplication1\consoleapplication1.cpp(22): note: see reference to function template instantiation 'Eigen::Matrix<double,3,1,0,3,1>::Matrix<TPoint3<TYPE>>(const T &)' being compiled 1> with 1> [ 1> T=TPoint3<TYPE> 1> ] 1> d:\pro\src\consoleapplication1\consoleapplication1.cpp(22): note: see reference to function template instantiation 'Eigen::Matrix<double,3,1,0,3,1>::Matrix<TPoint3<TYPE>>(const T &)' being compiled 1> with 1> [ 1> T=TPoint3<TYPE> 1> ] ```