使用C++ stl copy算法 读入tuple模板类型的对象时报 error C2679: 二进制“>>”: 没有找到接受“date”类型的右操作数的运算符(或没有可接受的转换)

#include<iostream>
#include<string>
#include<algorithm>
#include<iterator>
#include<deque>
#include<utility>
#include<tuple>
#include<functional>
#include<iomanip>

using namespace std;
using date = std::tuple<string, int, int>;
使用C++  stl copy算法 读入tuple模板类型的对象时报 error C2679: 二进制“>>”: 没有找到接受“date”类型的右操作数的运算符(或没有可接受的转换),啥原因?
环境vs2015 cummunity
相关代码:
 istream & operator >> ( istream & in, date & d)
{
    cout << "Input the month as a word:\n";
    in >> get<0>(d);
    cout << "Input the day as an integer(1-31):\n";
    in >> get<1>(d);
    cout << "Input the year as a 4-digit integer:\n";
    in >> get<2>(d);
    return in;
}
 ostream & operator<<(ostream & out, const date &d)
{
    out << "date : " << left << setw(20) << get<0>(d) << left << setw(3) << get<1>(d) << right << setw(6) << get<2>(d) << "     ";
    return out;
}

int main()
{
deque<date>dates;
cout << "Input the date objects input ctrl+z to terminate:\n";
copy(istream_iterator<date>(cin), istream_iterator<date>(), back_inserter(dates));
cin.clear();
    cin.get();
    return 0;
    }

https://blog.csdn.net/Function_Dou/article/details/84892941