sirven resueltos que punteros para operadores los lenguaje ejercicios direccion declaracion cadenas aritmetica c++ c++14 typetraits

c++ - resueltos - punteros en c



¿Por qué std:: is_assignable devuelve false con los tipos de punteros relacionados? (2)

Dadas dos clases muy simples:

class X { }; class Y : public X { };

¿Por qué es que, con Clang y GCC dirigidos a C ++ 14 , el valor std::is_assignable<X*, Y*>::value es false ? Es true con Clang en mi configuración cuando selecciono C ++ 11.


Esto se debe a que en su caso X* convierte en un valor. No se puede asignar a un valor. Cambie a un valor lime:

std::is_assignable<X*&, Y*>::value // ~^~


std::is_assignable cheques:

Si la expresión std::declval<T>() = std::declval<U>() está bien formada en un contexto sin evaluar

Pero no puede asignar un valor de r (que es lo que sería declval<X*>() ). Necesita un valor en el lado izquierdo de la tarea:

std::is_assignable<X*&, Y*>::value

Eso sería cierto. Si Clang está volviendo verdadero, definitivamente es un error de Clang.