Ho notato che le asserzioni statiche nei modelli di classe non vengono attivate quando le istanze sono typedef
'ed.Dovrebbe essere attivato static_assert con 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;
Questo codice viene compilato senza errori. Se provo a creare un'istanza, quindi l'asserzione fallisce:
t obj; // error: static assertion failed: "should fail"
Infine, se sostituisco la condizione con false
, l'asserzione non riesce, anche se non un'istanza della classe template:
template <typename T>
struct test_assert
{
static_assert(false, "always fails");
};
Ho provato questo codice su gcc-4.5.1 e gcc-4.7.0. Questo comportamento è normale? A che ora il compilatore dovrebbe verificare asserzioni statiche? Immagino che la ricerca in due fasi sia coinvolta, ma il typedef non dovrebbe innescare la seconda fase?
+1. Grande domanda. :-) – Nawaz