NABLA Nabla Ain't Basic Linear Algebra
Tags are used to determine the kind of expression and its behavior.
Imagine a template function that gets a parameter a of type
Then this function knows that its parameter can be assigned from a matrix expression like
or efficiently swapped with another object of the same type
or an element can be changed
Contrary, if the tag is e.g. reference then function can only change elements and nothing more. Neither it can assign an expression to a, nor even resize or otherwise change an object.
There are several tags defined in this library. Each of these tags has some natural requirements which must be strictly satisfied whenever an expression is tagged.
expressionmust provide access to elements, i.e. one can get object's elements using subscript operator.
referencemust be mutable, i.e. one can change (or just get) object's elements using subscript operator. All changes are reflected on the referred object.
storagemust be actual storage types. This implies that the object must be: