:cpp:

#pragma once

#define MAKE_SINGLETON(ClassName)                   \\
public:                                             \\
  ClassName(const ClassName &) = delete;            \\
  ClassName &operator=(const ClassName &) = delete; \\
  ClassName(ClassName &&other) = delete;            \\
  ClassName &operator=(ClassName &&) = delete;      \\
  static ClassName &get() {                         \\
    static ClassName instance;                      \\
    return instance;                                \\
  }

#define CONSTRUCT_SINGLETON(ClassName) ClassName ::get();
#define GET_SINGLETON(ClassName) ClassName ::get();