I'm trying to learn operator overloading and I got an error on my first attempt. 

```
template<typename T>
class Pair
{
public:
    T x; T y;
    Pair(T x, T y): x(x), y(y){};
    ~Pair(){};

    /* data */
};
template<typename T>
ostream& operator<<(ostream &os, const Pair<T> &p)
{
    return os<<"("<<p.x<<", "<<p.y<<")";
}

template<typename T>
istream& operator>>(istream &is, Pair<T> &p)
{
    return is>>"(">>p.x>>", ">>p.y>>")";
}

```

I want to be able to do the following:

```
Pair<int> p;
cin>>p;
cout<<p;

```

And giving input for `Pair` object means being able to give `(1, 2)` as input which after `cin`, produces a `Pair<int>`. 

I get a compile time error at `is>>"("`. What is the way to correct this?