#include <iostream>
using namespace std;
#define FORCE_INSTANTIATE(x) (x)
template <class T>
class ExportToLua
{
public:
ExportToLua() {}
virtual ~ExportToLua() { FORCE_INSTANTIATE(m_registered); }
private:
static int m_registered;
};
template <class T> int ExportToLua<T>::m_registered = T::exportToLua();
class Example: public ExportToLua<Example>
{
public:
Example() {}
virtual ~Example() {}
static int exportToLua();
};
int Example::exportToLua()
{
cout << "int Example::exportToLua()" << endl;
return -2;
}
//template class ExportToLua<Example>;
int main()
{
//Example exam;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKI2RlZmluZSBGT1JDRV9JTlNUQU5USUFURSh4KSAoeCkKCnRlbXBsYXRlIDxjbGFzcyBUPgpjbGFzcyBFeHBvcnRUb0x1YQp7CiAgcHVibGljOgogICAgRXhwb3J0VG9MdWEoKSB7fQogICAgdmlydHVhbCB+RXhwb3J0VG9MdWEoKSB7IEZPUkNFX0lOU1RBTlRJQVRFKG1fcmVnaXN0ZXJlZCk7IH0KICBwcml2YXRlOgogICAgICBzdGF0aWMgaW50IG1fcmVnaXN0ZXJlZDsKfTsKdGVtcGxhdGUgPGNsYXNzIFQ+IGludCBFeHBvcnRUb0x1YTxUPjo6bV9yZWdpc3RlcmVkID0gVDo6ZXhwb3J0VG9MdWEoKTsKCmNsYXNzIEV4YW1wbGU6IHB1YmxpYyBFeHBvcnRUb0x1YTxFeGFtcGxlPgp7CiBwdWJsaWM6CiAgICAgRXhhbXBsZSgpIHt9CiAgICAgdmlydHVhbCB+RXhhbXBsZSgpIHt9CiAgICAgc3RhdGljIGludCBleHBvcnRUb0x1YSgpOwp9OwoKaW50IEV4YW1wbGU6OmV4cG9ydFRvTHVhKCkKewogICAgIGNvdXQgPDwgImludCBFeGFtcGxlOjpleHBvcnRUb0x1YSgpIiA8PCBlbmRsOwogICAgIHJldHVybiAtMjsKfQoKLy90ZW1wbGF0ZSBjbGFzcyBFeHBvcnRUb0x1YTxFeGFtcGxlPjsKCmludCBtYWluKCkKewogIC8vRXhhbXBsZSBleGFtOwp9