local type as template argument
 
Hello all,
I wonder whether anyone has seen a workaround for this somewhere, 
perhaps in Boost or elsewhere...
I succeeded using a local type as template argument in MSVC 8.0, but I 
found out that this violates the standard (14.3.1.2), and sadly does not 
work with g++. I was essentialy able to run some code for each local 
type before main() - see the source code below.
Thanks for suggestions,
Filip
#include <iostream>
#include <list>
using namespace std;
// common interface
struct XC {
   virtual const char* get_data() = 0;
   virtual ~XC() {}
};
typedef list<XC*> XCL;
XCL global_list;
template<typename Y>
struct X : public XC {
   X() {
     // make this instance globally accessible...
     // this runs before main() for each X
     // instantiation
     global_list.push_back(this);
   }
   virtual const char* get_data() {
     return get_data_static();
   }
   static X initializer;
   // return data associated with Y
   static const char* get_data_static() {
     return data;
   }
   // data associated with Y
   static const char* data;
};
template<typename Y>
const char* X<Y>::data=Y::getYData();
template<typename Y> X<Y> X<Y>::initializer;
int main(int argc,char* argv[]) {
   // the local type whose data
   // will be visible globally
   struct Y {
     static const char* getYData() {
       return "some data";
       // make sure X<Y>::initializer exists
       X<Y>::initializer;
     }
   };
   // walk the list of X specializations:
   XCL::iterator i, e=global_list.end();
   for(i=global_list.begin(); i!=e; ++i)
     cout << (*i)->get_data() << endl;
   // use X<Y> directly:
   cout << X<Y>::get_data_static() << endl;
   return 0;
}