NonCopyable & operator=(const NonCopyable &other)=delete
NonCopyable & operator=(NonCopyable &&other)=default
NonCopyable(NonCopyable &&other)=default
NonCopyable(const NonCopyable &other)=delete
NonMovable & operator=(NonMovable &&other)=delete
NonMovable(const NonMovable &other)=default
NonMovable & operator=(const NonMovable &other)=default
NonMovable(NonMovable &&other)=delete