测试std :: byte的可用性

时间:2017-06-12 18:58:44

标签: c++ c++17

我想使用C ++ 17 std::byte类型(如果可用),如果没有,我会回到使用unsigned char,即沿着

的行
#include <cstddef>

namespace my {
#if SOMETHING
using byte = std::byte;
#else
using byte = unsigned char;
#endif
}

不幸的是,std::byte似乎没有附带通常的功能测试宏,所以上面SOMETHING应该是什么并不明显。 (AFAIK对于{17}的__cplusplus的值还没有设置,所以我也无法对此进行测试。)

那么,是否有人知道如何检测三大编译器上是否有std::byte

2 个答案:

答案 0 :(得分:4)

如果要测试C ++ 17引入的std::byte的可用性,则应使用__cpp_lib_byte宏(功能测试宏的完整列表为here)。

示例用法:

#include <iostream>
#include <cstddef>

#if __cpp_lib_byte
using byte = std::byte;
#else
using byte = unsigned char;
#endif

int main() {
    return 0; 
}

答案 1 :(得分:0)

对于C ++ 17,__cplusplus的值为201703L

SD-6建议添加__cpp_lib_byte作为功能测试宏,尽管此文档尚未标准化,标准委员会将决定在这些方面做些什么仍有待观察。例如,gcc 7.2支持std::byte但没有宏。所以未来......现在还没有。

请注意,使用unsigned char几乎可以提供与std::byte完全相同的行为 - 唯一的区别是unsigned char支持额外的算术运算。因此对std::byte支持进行不精确的检查是可以的 - 只要您测试一些支持std::byte的编译器来验证您没有做任何不适当的事情,您就可以了。