Ważny jest sens takiego zestawienia.
Jeśli koniecznie chcesz zrobić to "na skróty", to wystarczy typ int i konwersja (rzutowanie) w momencie użycia na typ char.
Jeśli chcesz mieć informację jaki typ danych przechowujesz i przechować w danym momencie jeden z nich z tą informacją, potrzebna będzie unia tych typów ze znacznikiem jaki typ danych jest wewnątrz (tzw. unia parametryczna).
Jeśli ma to być bardziej obiektowo i ze ścisłą kontrolą, to std::variant będzie odpowiedni.
Pytanie bez kontekstu pozwala zaproponować te ogólne rozwiązania.