MWE with c++17 and Eigen 3.4.0
#include <Eigen/Dense>
using namespace Eigen;
int main()
{
Matrix<float, 2, 2> m;
m << 1.0, 2.0, 3.0, 4.0;
m.cast<double>();
// m.template cast<double>();
return 0;
}
After reading Eigen document TopicTemplateKeyword and popular SO answer where-and-why-do-i-have-to-put-the-template-and-typename-keywords
I kinda know why/when we need template keywords. However, now I don't understand why the code above doesn't emit error message when I forget use template:
m.cast<double>();
Looks like it matches each rule of "have to use template" in the Eigen document.
m is a dependent namecast is a member templateWhy Eigen doesn't force me to add template before calling cast?
My best guess is m might not be a real dependent name(I could be wrong). It would be nice if someone could show me the source code line. I feel this is a nice FEATHER and I wanna write similar code as an author so that makes my user's life easier.
m is not a dependent name.
You can only have dependent names inside of a template, if they depend on the template parameters of the enclosing templates.
Example:
template <typename T>
void foo()
{
Matrix<T, 2, 2> m; // Note that `T` has to be involved.
m << 1.0, 2.0, 3.0, 4.0;
m.template cast<double>();
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With