t is well known that mathematicians run out of letters in three alphabets
when describing any non trivial procedure of practical significance. The
problem is especially apparent when coding any such procedure. One usually
supplies dozens of arguments of the same type (array of doubles or integers)
holding similar data into dozens of function calls. If one permutes any pair
of arguments by mistake then a subtle and time consuming error results.
The "tagged" classes in the files *Tag_*.hpp in the OTSProjects/ots/cuda
address this problem. The idea is to decorate every data holder into a
separate type with exactly the same functionality. This way there are no
complications in the functional code but the compiler verifies correct
sequencing of the arguments.