If you have a template and an overloaded function that takes an object that in turn takes a single integer in a non-explicit constructor, then the template is a better match and will be chosen over the function that requires an implicit conversion (the constructor call). The implicit conversion is, as required by the language, the deciding factor not to choose the overloaded function over the template which requires no implicit conversion. You are safe on that point (assuming, of course, there is nothing preventing the template from being instantiated with the integer, in which case you may have problems).
Yeah, it occurred to me that the specialization may not be necessary in the first place and I could have just created an overload (which is what I have done and it seems to work). I think I was concerned that creating an overload would break func for integer types because mytype does not have an explicit constructor and it still takes a single argument integer value. However this is not the case apparently.
No, functions cannot be partially specialized, only fully specialized. Overloading serves (most of) the purpose of partial specialization for classes. The reason you can partially specialize classes is because you cannot overload them.
I'm pretty sure partial specializations are allowed for functions, what I had done was not a partial specialization.
If the potential problem is the int-conversion you mentioned earlier, then that is not a problem as I responded to above.
I think I would be more comfortable with a template specialization in the header than an overload because of the potential problem I spoke about above. Lets see if it works