// { dg-do run  }
// PRMS Id: 6826
// Check that unnecessary templates are not instantiated.

template <class T> 
class Test 
{ 
 public: 
  void doThiss(); 
  void doThat(); 
};

template <class T> 
void Test<T>::doThiss() 
{ 
  T x; 

  x.thiss(); 
} 

template <class T> 
void Test<T>::doThat() 
{ 
  T x; 

  x.that(); 
} 

class A 
{ 
 public: 
  void thiss() {}
};

class B
{ 
 public: 
  void that() {}
};

int main() 
{ 
  Test<A> a; 
  a.doThiss();			// a.doThat() is not well formed, but then
				// it's not used so needn't be instantiated. 
  
  Test<B> b;
  b.doThat();			// simillarly b.doThiss(); 
} 
