Следующие работы:
#include <iostream>
#include <any>
#include <functional>
int main() {
std::any original = std::string("Test string");
std::any ref = std::cref(std::any_cast<const std::string&>(original));
std::any_cast<std::string&>(original)[0] = 'X';
std::cout << std::any_cast<std::reference_wrapper<const std::string>>(ref).get() << '\n'; // Prints Xest string
}
Редактировать: Как сказано в комментарии, это работает, только если тип известен во время компиляции. Если тип содержимого объекта является произвольным, это невозможно, поскольку std::reference_wrapper
должен быть создан в какой-то момент, и для этого ему нужно знать тип, который он должен обернуть во время компиляции, нет никакого способа обойти это, так как C ++ имеет статическую типизацию.