Aquí está un ejemplo de código mínima que ilustra el problema:¿Por qué esta advertencia del compilador IBM XL C/C++?
#include <iostream>
class Thing
{
// Non-copyable
Thing(const Thing&);
Thing& operator=(const Thing&);
int n_;
public:
Thing(int n) : n_(n) {}
int getValue() const { return n_;}
};
void show(const Thing& t)
{
std::cout << t.getValue() << std::endl;
}
int main()
{
show(3);
}
Esto produce el mismo error:
int main()
{
show(Thing(3));
}
IBM XL C/C++ 8,0 compilador bajo AIX emite estas advertencias:
"testWarning.cpp", line 24.9: 1540-0306 (W) The "private" copy constructor "Thing(const Thing &)" cannot be accessed.
"testWarning.cpp", line 24.9: 1540-0308 (I) The semantics specify that a temporary object must be constructed.
"testWarning.cpp", line 24.9: 1540-0309 (I) The temporary is not constructed, but the copy constructor must be accessible.
También probé g ++ 4.1.2 con "-Wall" y "-pedantic" y no obtuve ningún diagnóstico. ¿Por qué se requiere el acceso al constructor de copia aquí? ¿Cómo puedo eliminar la advertencia, además de hacer que el objeto se pueda copiar (que está fuera de mi control) o hacer una copia explícita para pasar (cuando el objeto de la vida real es caro de copiar)?
¿Está realmente usando ese constructor de copia dentro de la implementación de la clase en alguna parte? –
No. He publicado todo el archivo de código que produjo los diagnósticos. –
FYI: También probé con VC++ 2005 y 2008, compila sin advertencias. Entonces parece que tienes razón, el problema parece ser más bien el compilador de IBM específico – jdehaan