// { dg-do run } extern "C" void abort(); template <class T> struct S1 { static void f(); }; template <> void S1<int>::f() {} struct S2 { template <class T> static void g(T); }; template <> void S2::g(double) {} template <> void S2::g<int>(int) {} template <class T> struct S3 { template <class U> static int h(U); }; template <> template <> int S3<double>::h(int) { return 0; } template <> template <> int S3<char>::h(int) { return 1; } int main() { S1<int>::f(); S2::g(3.0); S2::g(7); if (S3<double>::h(7) != 0) abort(); if (S3<char>::h(7) != 1) abort(); }