¿Es posible "constificar" un campo de `std :: pair` sin hacks?

En C ++, compila el siguiente código:

std::pair <int, int>  x;
static_cast <std::pair <const int, int>*> (&x);

da un error:

error: invalid static_cast from type ‘std::pair<int, int>*’ to type ‘std::pair<const int, int>*’

Entiendo más o menos por qué sucede, ya que la calificación cv de un tipo en una lista de parámetros de plantilla puede, en principio, dar un resultado "incompatible". E incluso si en este caso no lo hace, el compilador no tiene forma de saberlo.

De todas formas,¿Hay alguna manera no hackea de realizar esta conversión?? Soy cuidadoso de usarreinterpret_cast para nada como he estado por problemas de puntería antes. Además, no puedo usar temporarios ya que esto está en código de rendimiento crítico.

EDITAR:

Esto es lo que estoy haciendo. Estoy implementando una interfaz de contenedor personalizada compatible constd::unordered_map. Por eso, esvalue_type necesita ser unpair <const key_type, mapped_type>. Para alguna optimización, necesitointernamente almacenar los valores comopair <key_type, mapped_type>, sinconst. Sin embargo, si hago eso, no puedo (sinreinterpret_cast) implementan iteradores sobre el contenedor, ya que necesitan devolver referencias a valores y solo tengo referencias a estos pares no constantes.

Respuestas a la pregunta(2)

Su respuesta a la pregunta