Cuando intento compilar el siguiente en ideone:¿Por qué es + = temporales válidos en la biblioteca estándar?
class X
{
public:
friend X& operator+=(X& x, const X& y);
};
X& operator+=(X& x, const X& y) { return x; }
int main()
{
X() += X();
}
Como era de esperar, esto arroja un error de compilación, porque no se puede pasar una temporal a una referencia no const.
Sin embargo, la siguiente compila con éxito en ideone:
std::string() += std::string();
No debería este error como mi ejemplo anterior?
Editar:
Si std :: string() define como una operación +=
miembro, ¿por qué hacer esto cuando tal uso permite que el lado izquierdo sea un temporal? ¿Por qué no definirlo como lo he mencionado anteriormente y evitar la referencia a problemas temporales?
para el registro, ambos compilan en VC++ 10.0 con advertencia 'advertencia C4239: extensión no estándar utilizada: 'argumento': conversión de 'X' a 'X &' ' –
@DougT.: VS permite vincular las temperaturas a referencias no constantes como una extensión, por lo que no es una cadena de herramientas útil para probar esto en –
-1 para cambiar radicalmente la pregunta después de haber sido respondida. No genial. Si tiene seguimientos, formule una pregunta por separado, no secuestrar su propia pregunta para preguntar algo completamente diferente una vez que se haya respondido el original. – littleadv