Replace include guard suffix with _HPP
Change implementation with explicit instantiations