繁体   English   中英

模板中无法识别出C ++ constexpr函数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM