template <class T>
struct A
{
  template <class T2>
  operator A<T2>() const { return A<T2>(); }
};

int main()
{
  A<int> a1;
  A<long> a2;    
  A<double> a3;
  A<char> a4;

  a2 = a1.operator A<long>();
  a3 = (A<double>) a1;                   
  a4 = a1;
}
 
