require("import") -- the import fn import("smart_pointer_overload") -- import code for k,v in pairs(smart_pointer_overload) do _G[k]=v end -- move to global f = Foo() b = Bar(f) assert(f:test(3) == 1) --assert(f:test(3.5) == 2) -- won't work due to being unable to overloads assert(f:test("hello") == 3) assert(b:test(3) == 1) --assert(b:test(3.5) == 2) -- won't work due to being unable to overloads assert(b:test("hello") == 3)