É possível "constituir" um campo de `std :: pair` sem hacks?

No C ++, a compilação do seguinte código:

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

dá um erro:

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

Entendo mais ou menos por que isso acontece, uma vez que a qualificação de um tipo em cv em uma lista de parâmetros de modelo pode, em princípio, fornecer um resultado "incompatível". E mesmo que, nesse caso, o compilador não tenha como conhecê-lo.

De qualquer forma,existe uma maneira não hackeada de realizar essa conversão? Eu sou cauteloso em usarreinterpret_cast para qualquer coisa como eu já estive com problemas de digitação antes. Além disso, não posso usar temporários, pois esse código é crítico para o desempenho.

EDITAR:

Aqui está o que estou fazendo. Estou implementando uma interface de contêiner personalizada compatível comstd::unordered_map. Por isso, évalue_type precisa ser umpair <const key_type, mapped_type>. Para alguma otimização, precisointernamente armazene os valores comopair <key_type, mapped_type>semconst. No entanto, se eu fizer isso, não posso (semreinterpret_cast) implementam iteradores no contêiner, pois eles precisam retornar referências a valores e eu tenho apenas referências a esses pares não-const.

questionAnswers(2)

yourAnswerToTheQuestion