#include <iostream>
using namespace std;
template <typename T> struct Foo{};
template <typename S> struct Bar
{
template <typename T> operator Foo<T>() { return Foo<T>{}; }
};
class Baz
{
public:
Baz(const Foo<int>&){}
};
int main()
{
Bar<float> bar;
Baz baz(bar); // works fine
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHN0cnVjdCBGb297fTsKCnRlbXBsYXRlIDx0eXBlbmFtZSBTPiBzdHJ1Y3QgQmFyCnsKCXRlbXBsYXRlIDx0eXBlbmFtZSBUPiBvcGVyYXRvciBGb288VD4oKSB7IHJldHVybiBGb288VD57fTsgfQp9OwoKY2xhc3MgQmF6CnsKcHVibGljOgogIEJheihjb25zdCBGb288aW50PiYpe30KfTsKCmludCBtYWluKCkKewogIEJhcjxmbG9hdD4gYmFyOwogIEJheiAgICAgICAgYmF6KGJhcik7IC8vIHdvcmtzIGZpbmUKfQ==