#include <iostream>
#include <string>
void f(std::string) { std::cout << "string\n"; }
struct bar;
struct foo {
friend void f(const bar&) {std::cout << "bar\n"; }
struct baz { operator bar&(); };
};
struct bar : foo {};
foo::baz::operator bar&() { static bar x; return x; }
template <typename T> struct foobar { operator bar() { return {}; }; };
int main() {
f(bar{});
f(foo::baz{});
f(foobar<bar>{});
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgoKdm9pZCBmKHN0ZDo6c3RyaW5nKSB7IHN0ZDo6Y291dCA8PCAic3RyaW5nXG4iOyB9CnN0cnVjdCBiYXI7CnN0cnVjdCBmb28gewogICAgZnJpZW5kIHZvaWQgZihjb25zdCBiYXImKSB7c3RkOjpjb3V0IDw8ICJiYXJcbiI7IH0KICAgIHN0cnVjdCBiYXogeyBvcGVyYXRvciBiYXImKCk7IH07Cn07CnN0cnVjdCBiYXIgOiBmb28ge307CmZvbzo6YmF6OjpvcGVyYXRvciBiYXImKCkgeyBzdGF0aWMgYmFyIHg7IHJldHVybiB4OyB9Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gc3RydWN0IGZvb2JhciB7IG9wZXJhdG9yIGJhcigpIHsgcmV0dXJuIHt9OyB9OyB9OwppbnQgbWFpbigpIHsKICAgIGYoYmFye30pOwogICAgZihmb286OmJhent9KTsKICAgIGYoZm9vYmFyPGJhcj57fSk7Cn0=