Add new header for memory management
Use rvalue member functions for as_*