如果count()是constexpr函数,为什么std :: array <int,count()=“”>无法编译?

时间:2018-08-29 12:23:15

标签: c++ visual-c++

为什么以下C ++代码无法在VC2017中编译?

struct FixedMatchResults
{
    static constexpr std::size_t count() { return 20; };

    std::array<int, count()> results;
};

错误是:

  

错误C2975:“ _ Size”:“ std :: array”的无效模板参数,   预期的编译时常量表达式

1 个答案:

答案 0 :(得分:2)

在完整的struct定义之后解析函数的主体。这是为了允许您潜在地引用在函数主体之后定义的其他成员。

但是,这意味着当编译器解析results时,它没有count函数的主体,因此它无法运行。

有关更详细的答案,请参阅以下问题:constexpr not working if the function is declared inside class scope