// PR 12337
class A {};
template <typename T>
class X : public A {
public:
  X(T&);
};
class B {
public:
  bool foo(A*);
  template <typename T>
  bool foo(T& t) { return foo(new X<T>(t)); }
};
int main()
{
  B x, y;
  x.foo(y);
}
// PR 12337
class A {};
template <typename T>
class X : public A {
public:
  X(T&);
};
class B {
public:
  bool foo(A*);
  template <typename T>
  bool foo(T& t) { return foo(new X<T>(t)); }
};
int main()
{
  B x, y;
  x.foo(y);
}