diff --git a/benchmark/dual_benchmark.cpp b/benchmark/dual_benchmark.cpp index cb09df8..5aea4be 100644 --- a/benchmark/dual_benchmark.cpp +++ b/benchmark/dual_benchmark.cpp @@ -39,7 +39,7 @@ template struct ManualDual { template struct ManualDual { T value; - poly::simd::Vec partials; + poly::simd::Vec partials; }; template struct ManualDual { T value; diff --git a/include/Math/Dual.hpp b/include/Math/Dual.hpp index ca094c1..4493e91 100644 --- a/include/Math/Dual.hpp +++ b/include/Math/Dual.hpp @@ -110,7 +110,7 @@ template struct Dual { constexpr Dual() = default; constexpr Dual(T v) : val(v) {} constexpr Dual(T v, ptrdiff_t n) : val(v) { partials[n] = T{1}; } - constexpr Dual(T v, SVector g) : val(v) { partials << g; } + constexpr Dual(T v, SVector g) : val(v), partials(g) {} constexpr Dual(std::integral auto v) : val(v) {} constexpr Dual(std::floating_point auto v) : val(v) {} constexpr auto value() -> T & { return val; } @@ -123,7 +123,7 @@ template struct Dual { [[nodiscard]] constexpr auto gradient(ptrdiff_t i) const -> const T & { return partials[i]; } - [[gnu::always_inline]] constexpr auto operator-() const & -> Dual { + [[gnu::always_inline]] constexpr auto operator-() const -> Dual { return {-val, -partials}; } [[gnu::always_inline]] constexpr auto