This line will not compile if that definition is not supplied. We see that Array simply passes the indices on to its engine object. Simply passing the indices on to the engine object may seem odd. There are several advantages to this extra level of indirection. As a result, Array has a wide variety of constructors for user convenience, while engines have but a few.
Engines support indexing only.
Array does not have direct access to the data, which is managed by the engine object. Engines have no such support. In general, Array is much more complex and feature-laden than Engine . Engines are simple enough to be written by users and plugged directly into the Array framework. First, there is the general Engine template, which is empty as there is no default behavior for an unknown EngineTag .