Все контейнеры STL содержат элементы только одного типа.
Однако есть два способа, которыми это требование может быть ослаблено.
Первый - через контейнер указателей, где типы связаны через наследование. Это не подходит для того, что вы просите здесь.
Второй (как сказал выше Игорь) использовать std::variant
для создания нового типа, который может содержать различные типы внутри себя.
Итак, для вашего примера, вы можете сделать std::stack<std::variant<int, char>>
.