I have some functions and data structures using glm for vector and matrix math.

Now I want to compute gradient’s with respect to the input variables. Since the computations are fairly complex, I’d like to use automatic differentiation to verify my manual gradient computation.

I’ve found https://autodiff.github.io/, which is exactly what I need. Its scalar *variables* are based on a `struct`

containing a `shared_ptr`

to an *expression*. I’d like to use `glm::vec<2, autodiff::Variable<float>`

, and similarly matrices, along with all the fun glm functions.

I already started porting the code, but I’m running into problems. for instance `glm::dot`

contains a check

```
template<length_t L, typename T, qualifier Q>
GLM_FUNC_QUALIFIER GLM_CONSTEXPR T dot(vec<L, T, Q> const& x, vec<L, T, Q> const& y)
{
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'dot' accepts only floating-point inputs");
return detail::compute_dot<vec<L, T, Q>, T, detail::is_aligned<Q>::value>::call(x, y);
}
```

I believe that in this case it’s safe to replace the check with `std::numeric_limits<T>::is_iec559 || GLM_CONFIG_UNRESTRICTED_GENTYPE`

(along with making a pull request), but I’m not sure and I certainly don’t know about all the other places.

I have defined the following before including glm:

```
#define GLM_FORCE_PURE
#define GLM_FORCE_XYZW_ONLY
#define GLM_FORCE_UNRESTRICTED_GENTYPE
```

Is it at all realistic to use glm and autodiff together?

Source: Windows Questions C++