在GCC-7中使用功能测试宏

问题描述 投票:0回答:1

我正在GCC 7.3中使用feature test macro。具体来说,我正在使用__cpp_guaranteed_copy_elision宏测试是否可以保证复制保留。

我正在使用带有-std=c++17标志的GCC 7.3。在这里,我实际上写代码要求确定地必须保证复制保留(我按值返回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是否根本不支持该宏?还是我没有正确使用功能测试宏?

c++ g++ c++17
1个回答
0
投票

那么,GCC 7.3根本不支持此宏吗?

不是。 gcc直到8.3和9.1才添加此特定功能测试宏。尽管这似乎支持从7.1开始的保证复制删除,这是不幸的。您现在无能为力了。

还是我不正确使用功能测试宏?

仅检查定义的__cpp_guaranteed_copy_elision是正确的,是的(#ifdef x#if defined(x)可以)。

尽管宏的要点是能够有条件地使用功能-而且您的代码仍然需要它...所以我不确定在该功能不可用的情况下您想做什么。

© www.soinside.com 2019 - 2024. All rights reserved.