gpt4 book ai didi

c++ - 在 MSVC 16.6.0 中找不到 std::popcount 标识符

转载 作者:行者123 更新时间:2023-12-01 14:05:21 24 4
gpt4 key购买 nike

是我做错了什么还是 Microsoft 对 std::popcount 的支持在 Visual Studio 16.6.0 版中被破坏了?

我正在使用 Microsoft Visual Studio 16.6.0,C++ 语言标准设置为 Preview - Features from the Latest C++ Working Draft (std:c++latest) 并尝试编译 the popcount sample code from cppreference:

#include <bit>
#include <bitset>
#include <cstdint>
#include <initializer_list>
#include <iostream>

int main()
{
for (std::uint8_t i : { 0, 0b11111111, 0b00011101 }) {
std::cout << "popcount(0b" << std::bitset<8>(i) << ") = "
<< std::popcount(i) << '\n';
}
}

即使 cppreference 指出位操作 ( P0553R4 ) have been supported since version 16.5 和 MSVC 16.6 定义了特征宏 __cpp_lib_bitops,但上面的代码给出了以下错误:

Error   C3861   'popcount': identifier not found    ConsoleApplication3 C:\Users\rsjaf\source\repos\ConsoleApplication3\ConsoleApplication3\ConsoleApplication3.cpp 22  
Message see declaration of 'std' ConsoleApplication3 C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.26.28801\include\iostream 19
Error (active) E0135 namespace "std" has no member "popcount" ConsoleApplication3 C:\Users\rsjaf\source\repos\ConsoleApplication3\ConsoleApplication3\ConsoleApplication3.cpp 22
Error C2039 'popcount': is not a member of 'std' ConsoleApplication3 C:\Users\rsjaf\source\repos\ConsoleApplication3\ConsoleApplication3\ConsoleApplication3.cpp 22

当我查看 bit header 时,我确实看到了一个用于 popcount 的模板,但我的应用程序似乎禁用了它。

最佳答案

当前的 MSVC std::popcount/std:c++20/std:c++latest 下可用。


正如@chris 所指出的,该功能尚未实现,因为运行时 CPU 功能检测尚未实现。

完成并启用它的 PR 处于工作进行中状态: https://github.com/microsoft/STL/pull/795

在实现它们之前定义 __cpp_lib_bitops(用于智能感知)和 __cpp_lib_int_pow2(通常)是一个错误。它由 https://github.com/microsoft/STL/pull/695 修复,但由于更改集成的延迟,该修复程序可能仍不适用于最新版本。

关于c++ - 在 MSVC 16.6.0 中找不到 std::popcount 标识符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61994625/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com