Betrachten Sie den folgenden Fallstatic_assert auf Inline-Funktion gibt Fehler
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
Sowohl baz
und bax
als Vorlage Argument akzeptiert. Es zeigt an, dass beide als Konstanten akzeptiert werden. Jedoch scheinen sie bei static_assert
anders zu sein (mindestens in gcc 4.9) - bax
ist keine Konstante mehr.
Meine Annahme war, dass static_assert
und Vorlage Gleichheit identisch auszuwerten. Zum Beispiel entweder Fehler sollte
- ‚Bax ist kein gültiges Templateargument‘ oder
static_assert
sollte nicht erhöhen nicht konstanten Zustand Fehler.
Bin ich falsch?
Wenn nicht 'foo' irgendwo deklariert ist, erwarte ich, dass das überhaupt nicht kompiliert wird ... –
behoben, verloren typedef void (* foo)(); hinzugefügt – hutorny
VC++ 14.0 akzeptiert beide. – Fireho