change all raw ptr to shared ptrs
add new test file
move types to separate file
fix header bug
change func_decl construction order
Merge branch 'lifetime'