Рассмотрим следующий случай
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
Оба baz
и bax
принимаются как аргументы шаблона.
Это указывает на то, что оба они принимают в качестве констант.
Однако при static_assert
они кажутся разными (по крайней мере, в gcc 4.9) - bax
больше не является константой.
Мое предположение заключалось в том, что static_assert
и шаблон одинаково оценивают постоянство.
Например. либо ошибка должна быть
- 'bax не является допустимым аргументом шаблона' или
-
static_assert
не должен вызывать непостоянную ошибку условия.
Я не прав?