In boost/qvm/m_traits_array.hpp and boost/qvm/v_traits_array.hpp Boost QVM defines appropriate v_traits and m_traits specializations that allow Boost QVM functions to operate directly on plain old C arrays:
float v[3] = {0,0,7};
float3 vrot = rotx_m<3>(3.14159f) * v;
Naturally, operator overloads cannot kick in if all elements of an expression are of built-in types. The following is illegal:
float v[3] = {0,0,7};
v *= 42;
The vref and mref function templates can be used to work around this issue:
float v[3] = {0,0,7};
vref(v) *= 42;
Tutorial: Quaternion, Vector and Matrix Types | C Arrays | Views | Swizzling | Interoperability | Back to Boost QVM