首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用GCC-7的特征测试宏

使用GCC-7的特征测试宏
EN

Stack Overflow用户
提问于 2020-03-12 20:28:22
回答 1查看 224关注 0票数 0

我试着用GCC 7.3的特征测试宏。具体来说,我正在用__cpp_guaranteed_copy_elision宏测试有保证的复制省略。

我用GCC 7.3和-std=c++17旗子。在这里,我实际上编写了绝对需要保证复制省略的代码(我按值返回一个std::atomic<int> )。代码工作正常,编译也很好。然而,我的特性测试宏测试对于__cpp_guaranteed_copy_elision总是失败的。以下是代码:

代码语言:javascript
复制
#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();
}

我在以下几个方面进行了汇编:

代码语言:javascript
复制
g++ test.cpp -o test -std=c++17

它总是产出:

代码语言:javascript
复制
Don't have it

我也试过:

代码语言:javascript
复制
#if defined(__cpp_guaranteed_copy_elision)

报告仍然是阴性的。那么,GCC 7.3是否根本不支持这一宏观政策?还是我使用了错误的特性测试宏?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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)很好)。

尽管宏的重点是能够有条件地使用某一特性--在这里,您的代码无论如何都需要它.因此,我不确定在功能不可用的情况下,您想要做什么。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60661455

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档