#include <iostream>


struct Base
{
    Base(){}
    Base(const Base&) { std::cout << "gotcha\n"; }
};

void test(const Base&)
{
  static int i = 0;
  std::cout << "Done test " << ++i << "\n";
}

struct Derived : Base
{
};

struct Foo
{
    operator Derived() { return Derived(); }
    static Derived moo() { return Derived(); }
};

int main()
{
    test(Foo());
    test(Derived());
    test(Foo::moo());
}
