我正在尝试学习c ++ 17的新功能/技巧,但是后来我去了std :: byte,由于某种未知的原因,即使是最基本的“ hello world”,我也似乎无法编译输入具有该类型的程序。
整个程序:
#include <cstddef>
int main(int argc, char* argv[])
{
std::byte byte;
return 0;
}
编译命令:
g++ ./main.cpp
但是输出始终是:
./main.cpp: In function ‘int main(int, char**)’:
./main.cpp:4:10: error: ‘byte’ is not a member of ‘std’
std::byte byte;
我使用gcc 7.4.0在Ubuntu 18.04上工作。我检查了“ /usr/include/c++/7.4.0/”,头文件cstddef在那里,字节似乎已定义。
我也尝试使用clang:
clang++ ./main.cpp
但是结果是一样的。在这一点上,我只能认为cstddef已损坏/错误。有什么解决办法吗?
答案 0 :(得分:2)
正如πάντα ῥεῖ在评论中指出的那样,我缺少c ++ 17编译标志。正确的编译命令:
g++ -std=c++17 ./main.cpp
答案 1 :(得分:0)
如果使用clang 5.0(即使带有-std=c++17
标志),也会发生相同的错误。
在这种情况下,要解决此问题,您需要升级到clang 6。
可以进行快速,临时的解决(但不建议使用,因为它与std
名称空间一起使用),它可能类似于:
#if defined(__clang__) && __cplusplus >= 201703L && __clang_major__ < 6
// This is a minimal workaround for clang 5.0 with missing std::byte type
namespace std {
enum class byte : unsigned char {};
}
#endif