//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());}
voidfile_socket::take_over(std::shared_ptr<server_socket>socket_ptr){if(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());}
//void file_socket::take_over(std::shared_ptr<file_socket> socket_ptr) {if (socket_ptr) printf("restore user data from invalid object (" ASCS_LLF ").\n", socket_ptr->id());}