In 10.2 we introduced Type_handler.
The original idea was to assign a specific data type behavior to Item_xxx using:
- either class templates passing a specific Type_handler_xxx as a parameter, or
- virtual inheritance (also known as diamond inheritance) from Type_handler_xxx
Both ways appeared to have some disadvantages.
It was decided instead of "Item is Type_handler" (when Item derives from Type_handler) to use "Item has Type_handler" (when Item has a pointer to Type_handler).