Программист Василий и Singleton

Для некоторой операционной системы для управления громкостью звука в системе используется класс Sound.
Чтобы не было конфликтов в системе, экземпляр этого класса должен быть уникальным.
Программисту Василию поручили решить задачу, но он напился и в пьяном угаре смог только запустить IDE.
Осторожно столкнув Василия на пол, укройте его одеялом и напишите класс.
Класс должен содержать:
    - публичную функцию instance, возвращающую указатель на экземпляр;
    - публичные функции setVolume(const size_t &) и getVolume() для управления громкостью звука;
    - публичные функции setDevice(const Device &device) и getDevice() для управления устройствами воспроизводящими звук.
Уровень громкости по умолчанию равен нулю.

template<class Device>
class Sound {
 public:
  static std::shared_ptr<Sound> instance() {
    if (sound_ == nullptr) {
      sound_ = std::make_shared<Sound>(Sound());
    }
    return sound_;
  }

  void SetVolume(const size_t &volume) {
    volume_ = volume;
  }

  size_t GetVolume() const {
    return volume_;
  }

  void SetDevice(const Device &device) {
    device_ = device;
  }

  Device GetDevice() const {
    return device_;
  }

 private:
  explicit Sound() : volume_(0) {}
  static std::shared_ptr<Sound> sound_;
  size_t volume_;
  Device device_;
};

template<class Device>
std::shared_ptr<Sound<Device>> Sound<Device>::sound_ = nullptr;