extern "C" int strcmp(const char*, const char*);

template <class T>
struct S3
{
  template <class U>
  static const char* h(U);
};

template <>
template <>
const char* S3<double>::h(int) { return __PRETTY_FUNCTION__; }

template <>
template <>
const char* S3<char>::h(int) { return __PRETTY_FUNCTION__; }

int main()
{
  if (strcmp (S3<double>::h(7), 
	      "static const char* S3<T>::h(U) [with U = int, T = double]") == 0)
    return 0;
  else 
    return 1;
}
