// { dg-do assemble  }
template <class T1,class T2>
struct X
{
  T1 a;
  struct Y
  {
    T2 x;
    Y (T2 _x) { x=_x; }
  };
};
template <class T1>
struct X<T1,int>
{
  T1 a;
  struct Y
  {
    int x;
    Y (int _x) { x=_x; }
  };
};
template <>
struct X<int,int>
{
  int a;
  struct Y
  {
    int x;
    Y (int _x) { x=_x; }
  };
};
void f ()
{
  X<char,char> t1;
  X<char,int> t2; 
  X<int,int> t3;  
}