对《C++ STL中文版》第一章一道习题的疑问解决办法

对《C++ STL中文版》第一章一道习题的疑问
第一章有一道特难的习题:

template<class T> inline
  T sum_all(T *first, T *last)
  {
  T sum;
  for(sum=0; first!=last; ++first)
  {
  sum += *first;
  }
  return (sum);
  }

如何更改sum_all的定义,似的对于有着奇怪定义的operator=(const T&)以及
operator+=(const T&)的参数类型T,其模版特化依然有着"明智"的行为?

  我在想好像不用更改sum_all的定义就能使其模版特化依然有着"明智"的行为。我实在想不出还要应付哪些特殊情况。

------解决方案--------------------
楼主看看下面的例子:
#include <iostream >
using namespace std; 

template <class T > inline 
T sum_all(T *first, T *last) 

T sum; 
for(sum=0; first!=last; ++first) 

sum += *first; 

return (sum); 


int main() 

char *p[]={"jdssds","jkfslkfjsf","fkljsflsfsj"};
cout<<sum_all(*p,*(p+1));
return 0;


------解决方案--------------------
template <class T > inline
T sum_all(T *first, T *last)
{
T sum=T();这样初始化.
for(; first!=last; ++first)
{
sum += *first;
}
return (sum);

另外需要对楼上的情况做 重载,不要特化