C++泛型编程模板。为什么我这个不能输出

#include<iostream>
#include<vector>
#include<list>
using namespace std;
template <typename T>
void display(T c)
{
    typename T::iterator it1,it2;
    it1=c.begin();
    it2=c.end();
    while(it1!=it2)
    {
        cout<<*it1<<endl;
        it1++;
    }
}
template<typename T>
void Sort(T &con)
{
    typename T::iterator it1,it2,it3;
    it3=con.begin();
    for(it1=con.begin();it1!=con.end();it1++)
    {
        for(it2=it1;it2!=con.end();it2++)
        {
            if(*it2<*it1){*it3=*it1;*it1=*it2;*it2=*it3;}
        }
    }
}
template<typename T>
void merge_sort(T c1,T c2,T &c3)
{
    T c(1);
    typename T::iterator it1,it2,it3;
    it3=c.begin();
    Sort(c1);
    Sort(c2);
    it1=c1.begin();
    it2=c2.begin();
    for(it1=c1.begin();it1!=c1.end();it1++)
    {
        for(it2=c2.begin();it2!=c2.end();it2++)
        {
            if(*it1<*it2)
            {
                *it3=*it1;
            }
            else
            *it3=*it2;
        }
    }
}
int main()
{
 int a[3]={1,4,3};
 vector<int>v1(a,a+3);
 int b[3]={4,2,5};
 vector<int>v2(b,b+3);
 vector<int>v3;
 int c[4]={1.5,4.5,3.5,1.5};
 list<double>lst1(c,c+4);
 int d[3]={4.5,2.5,5.5};
 list<double>lst2(d,d+3);
 list<double>lst3;
 merge_sort(v1,v2,v3);
 display(v3);
 merge_sort(lst1,lst2,lst3);
 display(lst3);
 return 0;
}