allowed variant_ to be a base class and fixed an issue in binding extra params