template <typename T>
class Pool {
public:
class Handle {};
Handle create () const {
return Handle();
}
};
class Object {
public:
typedef Pool<Object>::Handle Handle;
};
int main () {
Pool<Object> pool;
Object::Handle object = pool.create();
}
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+CmNsYXNzIFBvb2wgewpwdWJsaWM6CiAgY2xhc3MgSGFuZGxlIHt9OwoKICBIYW5kbGUgY3JlYXRlICgpIGNvbnN0IHsKICAgIHJldHVybiBIYW5kbGUoKTsKICB9Cn07CgpjbGFzcyBPYmplY3QgewpwdWJsaWM6CiAgdHlwZWRlZiBQb29sPE9iamVjdD46OkhhbmRsZSBIYW5kbGU7Cn07CgppbnQgbWFpbiAoKSB7CiAgUG9vbDxPYmplY3Q+IHBvb2w7CiAgT2JqZWN0OjpIYW5kbGUgb2JqZWN0ID0gcG9vbC5jcmVhdGUoKTsKfQo=