Incluso si cambiamos esto para usar una lista de inicialización en el constructor sigue fallando:
#include <pthread.h>
struct foo {
pthread_mutex_t test;
foo() : test(PTHREAD_MUTEX_INITIALIZER) {}
};
int main() {
foo f;
}
podemos ver qué que falla y hay un sólo puede ser utilizado para la inicialización dentro de unos contextos examinado la salida del pre-processsor:
struct foo {
pthread_mutex_t test;
foo() : test({ { 0, 0, 0, 0, 0, { 0 } } }) {}
};
no es legal el uso de llaves anidadas para la inicialización al igual que en C++ 03, pero lo que es más interesante quizá es que C++ 11 hace que esta sintaxis y el uso perfectamente legal .
En su código original, podemos ver algunas cosas más:
A::A()
{
const pthread_mutex_t test = PTHREAD_MUTEX_INITIALIZER; // initialization - fine
mu = test; // assignment - fine
mu = PTHREAD_MUTEX_INITIALIZER; // assignment - C++11 only
}
lo que muestran no es una tarea una inicialización. – Flexo
@Flexo, OOPS, lo siento. – Alcott
¡No hay necesidad de disculparse! – Flexo