当我乘以两个向量时
case class
我收到以下错误消息(ninja-build,gcc-7.1):
#include <iostream>
#include <fadiff.h>
#include <Eigen/Core>
int main(int argc, char *argv[])
{
using Scalar = fadbad::F<double>;
using VectorXs = Eigen::Matrix<Scalar, Eigen::Dynamic, 1>;
VectorXs a(2);
VectorXs b(2);
Scalar c = a.transpose() * b;
std::cout << c.x() << std::endl;
}
当我使用double作为Scalar类型时,它会编译并运行而不会出错。
我该如何解决这个问题?
答案 0 :(得分:1)
这是一个常见的问题,我想问题是fadbad
公开了一个通用的隐式构造函数,使它好像可以从一切转换而来。更准确地说,std::is_convertible<X, fadbad>
因此对任何类型X
都返回true,包括Eigen::Matrix< fadbad >
。在a * b
中,其中一个因子可以解释为兼容的标量。
必须在fadbad
中修复此问题,例如使用SFINAE将通用ctor仅用于有效类型。