提问者:小点点

G++10的特性测试在__cpp_lib_span上失败


下面的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;
}

它打印警告(如下所示),然后继续加载并使用spans。 跨度似乎在不那么小的程序中也能很好地工作。 G++可以认识到它确实支持概念(__cpp_concepts)。 是我做错了什么,还是我发现了一个编译器bug?

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

共1个答案

匿名用户

根据标准,_cpp_lib_*宏不是预定义的宏(与___cpp__concepts)。 预定义宏的列表位于[cpp.predefined]。

库功能测试宏需要包含头。 __cpp_lib_span在包含时获得定义。

在检查宏已定义之前,您没有包括任何一个,因此在此时未定义它并不是不正确的行为。

相关问题


MySQL Query : SELECT * FROM v9_ask_question WHERE 1=1 AND question regexp '(g++10|特性|测试|cpp_lib_span|失败)' ORDER BY qid DESC LIMIT 20
MySQL Error : Got error 'repetition-operator operand invalid' from regexp
MySQL Errno : 1139
Message : Got error 'repetition-operator operand invalid' from regexp
Need Help?