For the alias, the problem it that actually you have the possibility to display different type of image container, but by using an alias, it implies that GrayScaleImage struct should be templated (since the list of image is contained in a vector to allow edition, move etc), then Display3D should also be templated with an unique potential type. Finally it should be also possible to choose a special default type for the display3D template  the apply conversion but not sure that if should simplier for only display an image on 3D ...