内联函数的static_assert给出了错误

时间:2015-08-17 07:36:40

标签: c++ function templates inline static-assert

考虑以下案例

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

bazbax都被接受为模板参数。 它表明两者都被接受为常量。 但是,在static_assert它们似乎不同(至少在gcc 4.9中) - bax不再是常数。

我的假设是static_assert和模板相同地评估常量。 例如。要么错误

  • 'bax不是有效的模板参数'或
  • static_assert不应引发非常数条件错误。

我错了吗?

1 个答案:

答案 0 :(得分:1)

内联函数时,指向该函数的指针不存在。所以我们无法将其与nullptr进行比较。

函数最终是否内联,取决于编译器。 scene->moveToThread(QApplication::instance()->thread()); 关键字不保证。