This version solves:
* keyword argument parsing and extra helping things
* fast type switch and fast json parse and dump (about 5 times faster than the v2)
Now Svar supports kwargs like this:
int add_int(int a,int b){return a+b;}
TEST(Function,Overload){
Svar kw_f(add_int,"a"_a,"b"_a=0,"add two int");
EXPECT_EQ(kw_f(1,2),3); // call with arguments
EXPECT_EQ(kw_f(3),3); // b default is 0
EXPECT_EQ(kw_f("b"_a=1,"a"_a=2),3); // kwargs
kw_f.overload([](int a,int b,int c){
return a+b+c;
}); // overload is supported
EXPECT_EQ(kw_f(1,2,3),6);
}