https://ru.wikipedia.org/wiki/Странно_рекурсивный_шаблон
#include <iostream>
using namespace std;
template<typename T>
class BaseSinglton
{
protected:
BaseSinglton() {}
virtual ~BaseSinglton() {}
public:
static T& instance()
{
static T oObj;
return oObj;
}
};
class Settings : public BaseSinglton<Settings>
{
friend class BaseSinglton<Settings>;
private:
Settings() : BaseSinglton<Settings>() {}
virtual ~Settings() {}
};
int main()
{
Settings &oSetting = Settings::instance();
printf("poSetting = %p", &oSetting);
return 0;
}