See: http://en.wikipedia.org/wiki/Modern_C++_Design