better explicit constructors for variant