#include <map>
#include <memory>
#include <string>
//#include <boost/variant.hpp> ??? Guess Ideone doesn't have boost::variant?

struct BoostVariantFake
{
    int blah;
};

struct Data;

typedef std::map<std::string, std::unique_ptr<Data> > ConfigMap;

typedef BoostVariantFake ConfigValueTypes;
//typedef boost::variant<int, float> ConfigValueTypes;

struct Data
{
    ConfigValueTypes value;
    ConfigMap map;
};

int main()
{
    ConfigMap myMap;
    myMap["test"] = std::unique_ptr<Data>(new Data);
    myMap["test"]->value.blah = 357;
    myMap["test"]->map["example"] = std::unique_ptr<Data>(new Data);
    
    
    return 0;
}