¿Por qué std::is assignable devuelve false con tipos de puntero relacionados?
Dadas dos clases muy simples:
class X
{
};
class Y : public X
{
};
¿Por qué es eso, con Clang y GCC apuntando a C++14, std::is_assignable<X*, Y*>::value
es false
? Es true
con Clang en mi configuración cuando me dirijo a C++11.
24
2 answers
Esto se debe a que en su caso X*
se convierte en un rvalue. No se puede asignar a un rvalue. Cambie a un lvalue en su lugar:
std::is_assignable<X*&, Y*>::value
// ~^~
25
Author: Piotr Skotnicki,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-10-01 17:30:11
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-10-01 17:30:11
std::is_assignable
controles:
Si la expresión
std::declval<T>() = std::declval<U>()
está bien formada en un contexto no evaluado
Pero no se puede asignar a un rvalue (que es lo que declval<X*>()
sería) en absoluto. Necesita un lvalue en el lado izquierdo de la asignación:
std::is_assignable<X*&, Y*>::value
Eso sería cierto. Si Clang está devolviendo true, definitivamente es un error de Clang.
25
Author: Barry,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-10-01 21:10:32
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-10-01 21:10:32