考虑以下案例
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
和模板相同地评估常量。
例如。要么错误
static_assert
不应引发非常数条件错误。我错了吗?
答案 0 :(得分:1)
内联函数时,指向该函数的指针不存在。所以我们无法将其与nullptr进行比较。
函数最终是否内联,取决于编译器。 scene->moveToThread(QApplication::instance()->thread());
关键字不保证。