Avisar si se accede a un objeto movido en C ++ 11

Posible duplicado:
¿Qué puedo hacer con un objeto movido?

Después de llamar a std::move y pasar el resultado a una función, generalmente debe asumir que el acceso al objeto movido más tarde resultará en un comportamiento indefinido.

¿Existen herramientas que puedan detectar esos accesos y advertirle? Por ejemplo:

 { Widget w; foo(std::move(w)); // w may be undefined at this point w.doSomething(); // WARN } 

Al menos, gcc 4.7.2 y clang 3.2 con -Wall no se quejan.

Actualización: mirando hacia atrás a esta pregunta, el punto crítico es que el comstackdor no puede decidir si un objeto sigue siendo válido después de que se haya movido. Si la propuesta N4034: Movimiento destructivo fue aceptada, esperaría que el comstackdor tenga más opciones (pero solo si el movimiento es destructivo).

Tampoco ellos deberían. El comportamiento de una clase desplazada es lo que quieras que sea. No es algo que un comstackdor deba advertir.

Para los objetos de biblioteca estándar, una clase movida desde está en un “estado válido pero no especificado”. Como tal, es perfectamente legal hacer esto:

 std::vector v{20, 30, 40}; std::vector v2 = std::move(v); v = std::vector{50, 60, 70, 80}; 

clear no importa cuál es el estado actual del vector; simplemente borra el vector. Por lo tanto, se restablece a un estado conocido. Del mismo modo, operator= no importa cuál es el estado actual; se restablecerá a un estado conocido.