Observé que las aserciones estáticas en las plantillas de clase no se activan cuando las instancias son typedef
'ed.¿Debería activarse static_assert con un typedef?
#include <type_traits>
template <typename T>
struct test_assert
{
static_assert(std::is_same< T, int >::value, "should fail");
};
typedef test_assert<float> t;
Este código se compila sin error. Si trato de crear una instancia, entonces la aserción falla:
t obj; // error: static assertion failed: "should fail"
Por último, si se sustituye la condición con false
, la afirmación falla, incluso si no una instancia de la plantilla de clase:
template <typename T>
struct test_assert
{
static_assert(false, "always fails");
};
Probé este código en gcc-4.5.1 y gcc-4.7.0. ¿Es este comportamiento normal? ¿A qué hora se supone que el compilador verifica las aserciones estáticas? Supongo que la búsqueda en dos fases está involucrada, pero ¿no debería el typedef desencadenar la segunda fase?
+1. Gran pregunta :-) – Nawaz