remove static assert and pure virtual