The template specialization and resolution was not working. In particular, SFINAE caused all the helpful errors from asserts to be hidden. We make the dispatch explicit through a function and get rid of the template specialization.