Listing 6

std::vector<std::string> get_titles(const std::string & author)
{
   std::vector<std::string> retval;
   if (author == "Koenig")
   {
      retval.push_back("Accelerated C++");
      retval.push_back("C Traps and Pitfalls");
      retval.push_back("Ruminations on C++");
   }
   else if (author == "Alexandrescu")
   {
      retval.push_back("Modern C++ Design");
   }
   else if (author == "Jagger")
   {
      retval.push_back("Microsoft Visual C# .NET Step by Step");
   }
   return retval;
}
std::string get_website() { return "www.bugbrowser.com"; }
int main()
{
   HANDLE os_handle = create_named_pipe("\\\\.\\pipe\\p1");
   // Create a transport buffer using OS handle
   marshal::handle_buffer_t transport(os_handle);
   // Create an encoder (using a buffer)
   marshal::raw_iostream encoder(transport);
   // Create configured proxy object
   proxy_t<marshal::callee, marshal::raw_iostream> proxy;
   // Bind the proxy object to specific encoding stream(s)
   proxy.bind(encoder);
   // Ready to use the proxy, wait for incoming calls,
   // dispatch calls until link is closed
   while (proxy.dispatch_call()) {}
   return EXIT_SUCCESS;
}