Тестирование функций g ++ 10 не выполняется на __cpp_lib_span - PullRequest
0 голосов
/ 18 июня 2020

MCVE ниже проверяет, поддерживает ли компилятор (g ++ 10) интервалы, но дает неправильный ответ.

#ifndef __cpp_lib_span
#warning "This compiler does not support spans."
#endif

#include <span>

int main(void)
{
    int i[10]; 
    std::span s(i);
    return 0;
}

Он печатает предупреждение (ниже), но затем продолжает загрузку <span> и используйте промежутки. Кажется, что интервалы работают нормально и в менее минималистичных программах. g ++ прекрасно понимает, что он поддерживает концепции (__cpp_concepts). Я что-то делаю не так, или я обнаружил ошибку компилятора?

main.cpp:2:2: warning: #warning "This compiler does not support spans." [-Wcpp]
    2 | #warning "This compiler does not support spans."

1 Ответ

5 голосов
/ 18 июня 2020

Макросы _cpp_lib_* не предопределены в соответствии со стандартом (в отличие от _­_­cpp_­concepts). Список предопределенных макросов находится по адресу [cpp .predefined] .

Макросы тестирования функций библиотеки требуют включения заголовка. __cpp_lib_span определяется при включении <version> или <span>.

Вы не включали ни то, ни другое перед проверкой, определен ли макрос, поэтому неопределенное поведение в этот момент не является неправильным.

...