class noncopyable
    {
    public:
        const noncopyable &operator=(const noncopyable &) = delete;

        noncopyable(const noncopyable &) = delete;

    protected:
        noncopyable() = default;

        ~noncopyable() = default;
    };