ruiu added a comment. This doesn't seem like an improvement. The new code look more complicated than the original one. Maybe you want to make these classes non-template classes, while keeping some member functions template? https://reviews.llvm.org/D31028