GCC和MSVC中consteval的行为不同(不工作)

4

考虑下面的代码:

#include <cstdint>
#include <vector>

class ClassT
{
public:
    consteval static size_t GetSize()
    {
        return sizeof(int);
    }

    void Resize()
    {
        _Data.resize(GetSize(), 0);
    }

    std::vector<uint8_t> _Data;
};

int main()
{
    ClassT Object;
    Object.Resize();

    return 0;
}

GCC能够成功编译它,但是MSVC会出现以下错误:
error C7595: 'ClassT::GetSize': call to immediate function is not a constant expression

我有所遗漏吗?还是这真的是MSVC的错误?

编译器版本:x86-64 gcc 10.2x64 msvc v19.28。(前往Godbolt查看


1
这绝对是 MSVC 的一个 bug。 - AndyG
1
缩减。这肯定是 MSVC 的一个 bug。 - Barry
@Barry 和 AndyG。感谢您的评论,我将向MSVC开发人员报告这个错误。 - Sprite
他们可能已经知道了,因为无聊的consteval在19.27->19.28中被添加了。 - Öö Tiib
@ÖöTiib 是的,我找到了一个关于这个错误的现有报告(链接)。下次在提问之前我会更仔细地搜索。 - Sprite
1个回答

5
这似乎是MSVC的一个bug。 它甚至可能与这个现有问题相同 - #1224555

最简示例:

consteval int test() { return 0; }

int main() {
    return test(); // error C7595: 'test': call to immediate function is not a constant expression
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接