Fix use of alignas(0) which is not ignored on GCC. - alignas(0) should be ignored, however it results in a build error on GCC, so instead default to the alignment of double in Jets if we cannot align to 16-byte boundaries on the platform, but are compiling with C++11. Change-Id: I2e54c69516ea2e1447a8bdc138b2dd70050c6dad
diff --git a/include/ceres/jet.h b/include/ceres/jet.h index e6adaa0..4f517f7 100644 --- a/include/ceres/jet.h +++ b/include/ceres/jet.h
@@ -244,9 +244,10 @@ 16 <= ::ceres::port_constants::kMaxAlignBytes; static constexpr int kAlignHint = kShouldAlignMatrix ? Eigen::AutoAlign : Eigen::DontAlign; - // alignas(0) should always be ignored, in which case this definition of - // v should be equivalent to the non-C++11 case. - static constexpr size_t kAlignment = kShouldAlignMatrix ? 16 : 0; + // Default to the native alignment of double if 16-byte alignment is not + // supported. We cannot use alignof(T) as if we do, GCC complains that the + // alignment 'is not an integer constant', although Clang accepts it. + static constexpr size_t kAlignment = kShouldAlignMatrix ? 16 : alignof(double); alignas(kAlignment) Eigen::Matrix<T, N, 1, kAlignHint> v; #endif };