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.