std :: byte不是'std'的成员

时间:2019-07-01 22:57:57

标签: c++ gcc std ubuntu-18.04

我正在尝试学习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已损坏/错误。有什么解决办法吗?

2 个答案:

答案 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