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