#include <stdio.h>
//////////////////////////////////////////////
// Specific case
//////////////////////////////////////////////
class CPassive
{
public:
CPassive()
{
printf(" passively called ");
}
};
class CActive
{
private:
static CPassive ms_passive;
};
CPassive CActive::ms_passive;
///////////////////////////////////////////////////////////
// GENERIC TYPES
///////////////////////////////////////////////////////////
class CSample
{
public:
CSample()
{
printf("sample ");
}
};
template <typename T>
class CGenericPassive
{
public:
CGenericPassive()
{
T sample;
printf(" generic passive .. ");
}
private:
};
template <typename T>
class CGenericActive
{
private:
static CGenericPassive<T> ms_passive;
public:
CGenericActive()
{
// just reference it so it gets instantiated
(void)ms_passive;
}
};
template<typename T>
CGenericPassive<T> CGenericActive<T>::ms_passive;
int main(int argc, char** argv)
{
CActive activeExample; // instantiates the static member
CGenericActive<CSample> activeExample2; // instantiated now
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi8vIFNwZWNpZmljIGNhc2UKLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwpjbGFzcyBDUGFzc2l2ZQp7CnB1YmxpYzoKICAgIENQYXNzaXZlKCkKICAgIHsKICAgICAgICBwcmludGYoIiBwYXNzaXZlbHkgY2FsbGVkICIpOwogICAgfQp9OwoKY2xhc3MgQ0FjdGl2ZQp7CnByaXZhdGU6CiAgICBzdGF0aWMgQ1Bhc3NpdmUgbXNfcGFzc2l2ZTsKfTsKQ1Bhc3NpdmUgQ0FjdGl2ZTo6bXNfcGFzc2l2ZTsKLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLy8gR0VORVJJQyBUWVBFUwovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwpjbGFzcyBDU2FtcGxlCnsKcHVibGljOgogICAgQ1NhbXBsZSgpCiAgICB7CiAgICAgICAgcHJpbnRmKCJzYW1wbGUgIik7CiAgICB9Cn07Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KY2xhc3MgQ0dlbmVyaWNQYXNzaXZlCnsKcHVibGljOgogICAgQ0dlbmVyaWNQYXNzaXZlKCkKICAgIHsKICAgICAgICBUIHNhbXBsZTsKICAgICAgICBwcmludGYoIiBnZW5lcmljIHBhc3NpdmUgLi4gIik7CiAgICB9CnByaXZhdGU6Cn07Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KY2xhc3MgQ0dlbmVyaWNBY3RpdmUKewpwcml2YXRlOgogICAgc3RhdGljIENHZW5lcmljUGFzc2l2ZTxUPiBtc19wYXNzaXZlOwpwdWJsaWM6CiAgICBDR2VuZXJpY0FjdGl2ZSgpCiAgICB7CiAgICAgIC8vIGp1c3QgcmVmZXJlbmNlIGl0IHNvIGl0IGdldHMgaW5zdGFudGlhdGVkCiAgICAgICh2b2lkKW1zX3Bhc3NpdmU7CiAgICB9CiAgICAKfTsKdGVtcGxhdGU8dHlwZW5hbWUgVD4KQ0dlbmVyaWNQYXNzaXZlPFQ+IENHZW5lcmljQWN0aXZlPFQ+Ojptc19wYXNzaXZlOwoKaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQp7CiAgICBDQWN0aXZlIGFjdGl2ZUV4YW1wbGU7IC8vIGluc3RhbnRpYXRlcyB0aGUgc3RhdGljIG1lbWJlcgogICAgQ0dlbmVyaWNBY3RpdmU8Q1NhbXBsZT4gYWN0aXZlRXhhbXBsZTI7IC8vIGluc3RhbnRpYXRlZCBub3cKfQ==