This matches the current version of the DOM spec. And since C++ doesn't have mixins this is actually a CRTP class.