// { dg-do assemble } template<class T> class TestClass1 { public: TestClass1() { } }; template<class T> class TestClass2 { public: TestClass2() { } T operator()(int) { } }; template<class T> void doit(T x) { TestClass1<T> q1; q1 = TestClass1<T>(); TestClass2<T> q2; q2 = TestClass2<T>(); TestClass1<T> p1; p1 = TestClass1(); // { dg-error "" } template used as expression TestClass2<T> p2; p2 = TestClass2(); // { dg-error "" } template used as expression } int main() { double x; doit(x); }