C++ 在GCC-7中使用功能测试宏
我正在尝试使用GCC 7.3中的。具体地说,我正在使用C++ 在GCC-7中使用功能测试宏,c++,g++,c++17,C++,G++,C++17,我正在尝试使用GCC 7.3中的。具体地说,我正在使用\ucpp\uguaranted\ucopy\u elision宏测试保证复制省略 我正在使用带有-std=c++17标志的GCC 7.3。在这里,我实际编写的代码肯定需要保证拷贝省略(我按值返回std::atomic)。代码工作正常,编译良好。然而,我的功能测试宏测试对于\uuuuCPP\uGuaranted\uCopy\uElision总是失败。代码如下: #include <iostream> #include <at
\ucpp\uguaranted\ucopy\u elision
宏测试保证复制省略
我正在使用带有-std=c++17
标志的GCC 7.3。在这里,我实际编写的代码肯定需要保证拷贝省略(我按值返回std::atomic
)。代码工作正常,编译良好。然而,我的功能测试宏测试对于\uuuuCPP\uGuaranted\uCopy\uElision
总是失败。代码如下:
#include <iostream>
#include <atomic>
std::atomic<int> F() { return std::atomic<int>{}; }
int main()
{
#if __cpp_guaranteed_copy_elision
std::cout << "Have guaranteed copy elision" << std::endl;
#else
std::cout << "Don't have it" << std::endl;
#endif
std::atomic<int> a = F();
}
它总是输出:
Don't have it
我还尝试:
#if defined(__cpp_guaranteed_copy_elision)
而且报告仍然是负面的。那么GCC 7.3不支持这个宏吗?或者我是否错误地使用了功能测试宏
那么GCC 7.3不支持这个宏吗
没有。gcc直到8.3和9.1才添加这个特定的特性测试宏。尽管从7.1开始似乎支持保证的拷贝省略,但这是不幸的。你现在对此无能为力
或者我是否错误地使用了功能测试宏
检查正在定义的仅\u cpp\u保证复制\u省略
是否正确,是(\ifdef x
或\if defined(x)
可以)
虽然宏的要点是能够有条件地使用某个特性,但在这里,您的代码仍然需要它。。。因此,我不确定在该功能不可用的情况下,您想要做什么
那么GCC 7.3不支持这个宏吗
没有。gcc直到8.3和9.1才添加这个特定的特性测试宏。尽管从7.1开始似乎支持保证的拷贝省略,但这是不幸的。你现在对此无能为力
或者我是否错误地使用了功能测试宏
检查正在定义的仅\u cpp\u保证复制\u省略
是否正确,是(\ifdef x
或\if defined(x)
可以)
虽然宏的要点是能够有条件地使用某个特性,但在这里,您的代码仍然需要它。。。因此,我不确定在该功能不可用的情况下,您想要做什么
#if defined(__cpp_guaranteed_copy_elision)