MODE: INLINE

#include <ctime>
#include <iostream>

struct DateRecipe02a {
    DateRecipe02a()  { update() ; }
    void update()    { epoch = std::time(nullptr); }

    int get_epoch() const { return epoch; }
private:
    std::time_t epoch;
};

namespace xs {
    template <>
    struct Typemap<DateRecipe02a*> : TypemapObject<DateRecipe02a*, DateRecipe02a*, ObjectTypePtr, ObjectStorageIV, StaticCast> {
        static std::string package () { return "MyTest::Cookbook::DateRecipe02a"; }
    };
}

struct DateRecipe02b {
    DateRecipe02b()  { update() ; }
    void update()    { epoch = std::time(nullptr); }

    int get_epoch() const { return epoch; }
private:
    std::time_t epoch;
};

namespace xs {
    template <>
    struct Typemap<DateRecipe02b*> : TypemapObject<DateRecipe02b*, DateRecipe02b*, ObjectTypePtr, ObjectStorageMG, StaticCast> {
        static std::string package () { return "MyTest::Cookbook::DateRecipe02b"; }
    };
}

MODULE = MyTest::Cookbook                PACKAGE = MyTest::Cookbook::DateRecipe02a
PROTOTYPES: DISABLE

DateRecipe02a* DateRecipe02a::new() { RETVAL = new DateRecipe02a(); }

void DateRecipe02a::update()

std::time_t DateRecipe02a::get_epoch()

BOOT {
    Stash(__PACKAGE__, GV_ADD).mark_as_loaded(__MODULE__);
}

void DateRecipe02a::DESTROY() {
}

MODULE = MyTest::Cookbook                PACKAGE = MyTest::Cookbook::DateRecipe02b
PROTOTYPES: DISABLE

DateRecipe02b* DateRecipe02b::new() { RETVAL = new DateRecipe02b(); }

void DateRecipe02b::update()

std::time_t DateRecipe02b::get_epoch()

BOOT {
    Stash(__PACKAGE__, GV_ADD).mark_as_loaded(__MODULE__);
}