Используя неподдерживаемый модуль Тенгора Эйгена, если я это сделаю:
size_t dim0 = 3;
size_t dim1 = 2;
size_t dim2 = 4;
Eigen::Tensor<double, 3> var(dim0, dim1, dim2);
Я получаю следующую ошибку:
/usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorDimensions.h:287:167: error: non-constant-expression cannot be narrowed from type 'unsigned long' to 'std::__1::array<long, 3>::value_type' (aka 'long') in initializer list [-Wc++11-narrowing]
Но код компилируется нормально, если я явно приведу измерения к long int:
long int dim0 = 3;
long int dim1 = 2;
long int dim2 = 4;
Eigen::Tensor<double, 3> var(dim0, dim1, dim2);
Вопросы:
- Для какой переменной размера это станет небезопасным? Если вообще?
- Конечно, Эйген должен вообще принимать тип
(size_t)
в качестве аргумента измерения? Должен ли я подать отчет об ошибке для этого или это предполагаемое поведение здесь?
Я использую C ++ 11, clang на Mac OSX (не тестировал другие платформы).