autoraw_socket_ptr(std::dynamic_pointer_cast<file_socket>(socket_ptr));//socket_ptr actually is a pointer of file_socket
printf("restore user data from invalid object ("ASCS_LLF").\n",raw_socket_ptr->id());
}
//socket_ptr actually is a pointer of file_socket, use std::dynamic_pointer_cast to convert it.
voidfile_socket::take_over(std::shared_ptr<server_socket>socket_ptr){printf("restore user data from invalid object ("ASCS_LLF").\n",socket_ptr->id());}
//this works too, but brings warnings with -Woverloaded-virtual option.
//void file_socket::take_over(std::shared_ptr<file_socket> socket_ptr) {printf("restore user data from invalid object (" ASCS_LLF ").\n", socket_ptr->id());}