//せめてもう少しマシに型検査できるように書き換えた。

struct KValRoot{
 virtual ~KValRoot(void){;}
 protected:
 virtual void dummy(void) = 0;
};

template<typename T>
struct KVal : public KValRoot{
 T* p;
 KVal(T* pointer) : p(pointer) {;}
 virtual ~KVal(void){;}
 protected:
 virtual void dummy(void){;}
};

typedef map<K,vector<KValRoot*> > KMap;