// { dg-do compile }

// Copyright (C) 2001 Free Software Foundation, Inc.
// Contributed by Nathan Sidwell 29 Dec 2001 <nathan@codesourcery.com>

// PR 4361. Template conversion operators were not overloaded.

template <class T> struct Second;

template<class T> struct First
{
  int Foo ();
  
  template <class U> operator Second<U>();
  template <class U> operator First<U>();
};

template <class T> int First<T>::Foo ()
{ return 0; } // This is here to make sure we didn't smash Foo's decl in the
	      // method vector

struct B { };
struct D { };

void Foo ()
{
  First<B> (First<D>::*pf)() = &First<D>::operator First<B>;
}
