Item 46: Define non-member functions inside templates when type conversions are desired(Effective C++)
-
When writing a class template that offers functions related to the template that support implicit type conversions on all parameters, define those functions as friends inside the class template.