#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;
}