我试着用GCC 7.3的特征测试宏。具体来说,我正在用__cpp_guaranteed_copy_elision宏测试有保证的复制省略。
我用GCC 7.3和-std=c++17旗子。在这里,我实际上编写了绝对需要保证复制省略的代码(我按值返回一个std::atomic<int> )。代码工作正常,编译也很好。然而,我的特性测试宏测试对于__cpp_guaranteed_copy_elision总是失败的。以下是代码:
#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();
}我在以下几个方面进行了汇编:
g++ test.cpp -o test -std=c++17它总是产出:
Don't have it我也试过:
#if defined(__cpp_guaranteed_copy_elision)报告仍然是阴性的。那么,GCC 7.3是否根本不支持这一宏观政策?还是我使用了错误的特性测试宏?
发布于 2020-03-12 20:45:18
那么,GCC 7.3是否根本不支持这一宏观政策?
gcc直到8.3和9.1才添加这个特殊的特性测试宏。这似乎支持自7.1以来的保证复制省略,这是不幸的。你现在没什么办法了。
还是我使用了错误的特性测试宏?
检查是否只定义了__cpp_guaranteed_copy_elision是正确的,是的(#ifdef x或#if defined(x)很好)。
尽管宏的重点是能够有条件地使用某一特性--在这里,您的代码无论如何都需要它.因此,我不确定在功能不可用的情况下,您想要做什么。
https://stackoverflow.com/questions/60661455
复制相似问题