In template meta programming, one can use SFINAE on the return type to choose a certain template member function, i.e.
template struct
In C++11, you can use a defaulted template parameter:
template = N>::type>
explicit A(A const &);
However, if your compiler doesn't support defaulted template parameters yet, or you need multiple overloads, then you can use a defaulted function parameter like this:
template
explicit A(A const &, typename std::enable_if= N>::type* = 0);