Я пытаюсь использовать макрос тестирования функции с G CC 7.3. В частности, я проверяю гарантированное разрешение копирования с помощью макроса __cpp_guaranteed_copy_elision
.
Я использую G CC 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)
И все равно сообщается отрицательно. Так G CC 7.3 просто не поддерживает этот макрос? Или я неправильно использую макросы тестирования функции?