http://en.m.wikipedia.org/wiki/Curiously_recurring_template_pattern