std variant visitor pattern