[英]C++ constexpr function not recognized as such in template
我得到'sizeof (((A*)0)->A::m_i)' is not a constant expression
gcc(v4.9.2)中'sizeof (((A*)0)->A::m_i)' is not a constant expression
错误消息,带有以下代码。
谁能解释为什么会这样?
头文件:啊
struct A {
int m_i;
static constexpr
size_t size() { return sizeof(m_i); } // no error if returns sizeof(decltype(m_i))
};
头文件:bh
#include "a.h"
template<typename T>
struct B {
static constexpr size_t size_of_A = A::size();
};
源文件:main.cpp
#include "b.h" // <-- Triggers the error(all else the same)
int main() {
return 0;
}
通过以下任何一种修改,错误都会消失:
main.cpp
的#include
指令已删除
struct B
更改为非模板
A::size()
修改为return sizeof(decltype(m_i));
PS对于收到的有关该帖子的评论,请注意:
a)必须按照指示将代码放在不同的文件中以重现错误。
b)该代码在任何地方都不包含表达式((A*)0)->A::m_i
。
该问题似乎是由于gcc版本引起的。 更新到5.1.0可以解决此问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.