References:
===================================================
Acknowledgement:
- Almost all of the ideas used in this solution were discussed clearly by
  Jonathan Boccara here: 
    https://www.fluentcpp.com/2016/12/08/strong-types-for-strong-interfaces/
- 