Si consideri il seguente casostatic_assert sulla funzione inline dà l'errore
typedef void (*foo)();
template<foo f>
struct bar {
static_assert(f!=nullptr,"f == null!");
};
void baz() {}
inline void bax() { }
bar<baz> ok;
bar<bax> bad; // error: non-constant condition for static assertion
Sia baz
e bax
sono accettati come argomenti di template. Indica che entrambi sono accettati come costanti. Tuttavia, a static_assert
sembrano essere diversi (almeno in gcc 4.9) - bax
non è più una costante.
La mia ipotesi era che il modello static_assert
e il modello valutino la costanza in modo identico. E.g. o errore dovrebbe essere
- 'Bax non è un argomento valido modello' o
static_assert
non dovrebbe sollevare errore condizione non costante.
Mi sbaglio?
A meno che 'foo' sia dichiarato da qualche parte, mi aspetto che questo non si compili affatto ... –
corretto, perso typedef void (* foo)(); aggiunto – hutorny
VC++ 14.0 accetta entrambi. – Fireho