clang does not like when `T' is defined as a `struct' template at one point but previously was declared as a `class' template.