Source: https://web.alcf.anl.gov/~zippy/publications/presentations/CompileTimePolymorphism/IBMWatsonTalk.pdf