Estoy compilando Percona (variante de MySQL) en mi Raspberry Pi, que tiene un procesador ARM.Trabajando con la conversión inválida de const
He encontrado un problema durante la compilación que se ha informado, pero nadie está dispuesto a solucionarlo porque ARM es una plataforma no compatible.
https://bugs.launchpad.net/percona-server/+bug/1002848
He conseguido solucionar el problema y con éxito compilar, pero mis conocimientos de C++ es un poco deficiente y no entiendo totalmente si en realidad he roto algo o no.
He leído muchas de las conversiones no válidas de preguntas const char * a char * en SO, que es de donde surgió la idea de esta solución.
El error fue de la siguiente manera:
error: invalid conversion from 'const pthread_mutex_t*' to 'pthread_mutex_t*'
(que en realidad no era pthread_mutex_t
en mi plataforma, pero el problema es el mismo - el tipo real se perdió al abismo infinito que es el búfer de desplazamiento)
El código erróneo era:
uint32 count(uint index) const
{
my_atomic_rwlock_rdlock(&time_collector_lock);
me cambiaron a este:
uint32 count(uint index) const
{
my_atomic_rwlock_t dummy = time_collector_lock;
my_atomic_rwlock_rdlock(&dummy);
time_collector_lock se define como:
private:
my_atomic_rwlock_t time_collector_lock;
Debido al hecho de esto se supone que es un mutex, tengo la sensación de que he hecho, probablemente esta no-thread-safe. ¿O está bien?
¿Existe una solución mejor?
¿Por qué no usar 'const_cast'? Habilitará ** su intención ** y no creará una ** copia ** de pthread_mutex_t ... –
Si intenta 'const_cast' un objeto que inicialmente se declaró como' const', el resultado es UB – SingerOfTheFall
@SingerOfTheFall El ** único ** propósito de const_cast es quitar la const. –