On Mon, 12 Jul 2021 at 12:02, Richard Biener wrote: > Somebody with more C++ knowledge than me needs to approve the > vec.h changes - I don't feel competent to assess all effects of the change.
They look OK to me except for: -extern vnull vNULL; +static constexpr vnull vNULL{ }; Making vNULL have static linkage can make it an ODR violation to use vNULL in templates and inline functions, because different instantiations will refer to a different "vNULL" in each translation unit. The extern object avoids that problem. It probably won't cause real problems in practice but it's still technically UB. If avoiding the extern variable is desirable, you can make it inline when compiled by a C++17 compiler (such as GCC 11): #if __cpp_inline_variables inline constexpr vnull vNULL{ }; #else extern const vnull vNULL; #endif and then define it in vec.c: #if ! __cpp_inline_variables const vnull vNULL{ }; #endif