Sorry for the big code block but it can be compiled.
I get this strange error. It seems that it doesn't recognize function template parameter.
In instantiation of 'DenseVectorArrayT<T, S>& DenseVectorArrayT<T, S>::operator-=(const DenseVectorT<C>&) [with C = std::array<int, 2ull>; T = int; long long unsigned int S = 2ull; DenseVectorArrayT<T, S> = DenseVectorArrayT<int, 2ull>]':
1.cpp:30:13: required from here
1.cpp:24:60: error: invalid operands of types '<unresolved overloaded function type>' and 'bool' to binary 'operator<'
DenseVectorArrayT &operator-=(const DenseVectorT<C> &v) { parent::templateadd<false>(*this, v); return *this; } // <--- HERE IT IS!!!
(in case you wonder how the error message came about, the compiler saw the function name "add" (an unresolved overloaded function type"), operator less-then, and the boolean literal "false", and said it has no idea how to compile "add < false")
Nice answer Cubbi...I'm a bit confused as well though. Why would the compiler need to be told add is a template? It has already seen the symbol, and knows it is a template - how does this differ from any other template call?