c++ - 内联函数上的 static_assert 给出错误

标签 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 不应引发非常量条件错误。

我错了吗?

最佳答案

当一个函数被内联时,指向该函数的指针不存在。所以我们不能和nullptr比较。

函数最终是否被内联,取决于编译器。 inline 关键字不保证这一点。

关于c++ - 内联函数上的 static_assert 给出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32045025/

相关文章:

非模板类中任意类型的C++成员变量

c++ - 将 rand_r 更改为 srand/rand

c - C 函数中的参数传递

jquery:将多个功能变成一个插件

c++ - 将成员函数作为参数传递给函数模板

c++ - 二折多态性很奇怪,如何使其可扩展?

c++ - 我们可以为模板特化引入别名吗?

C++ 模板帮助,使用模板进行集成

c++ - 使用同一个 fstream 读写同一个文件

Javascript 函数调用,如 somefunction ("Hi") ("Hello") ("How")