Use derived class instead of alias templates
Summary
A motivation of !58 (merged) was to have CTAD for alias template, which requires c++20. Instead of alias templates, this MR implements a derived class.
A motivation of !58 (merged) was to have CTAD for alias template, which requires c++20. Instead of alias templates, this MR implements a derived class.