假设我具有签名[[noreturn]] void die(int exit_code);
的功能。如果我写的语句:为什么检查返回类型的[[noreturn]]函数?
check_some_condition() or die(EXIT_FAILURE);
我得到一个错误信息(使用GCC 5.4.0):
error: expression must have bool type (or be convertible to bool)
偏偏是检查类型,如果编译器知道进入该功能,返回值无关紧要;如果条件检出,返回类型无关紧要?
编辑:关于[[noreturn]]
标准的措辞是否没有解决这一问题,即放宽对类型的要求以使这些表达“合法化”?
那么,函数'die'不返回'bool'也不可将其转化为'bool'一个类型(例如,'int')。你为什么期望编译器能够将它转换为布尔表达式?实际的问题应该是:如果**你知道进入该函数,返回值无关紧要,那么为什么你把它作为布尔表达式的一部分? –
@TheodorosChatzigiannakis [[noreturn]]根本不是一种类型。这是一个属性。 – StoryTeller
@StoryTeller:1.忘记输入'void'。 2.事实上,我希望有一个'[noreturn]]空白'(或[[noreturn]]'什么)可以“转换”为任何类型,因为你实际上不需要进行转换,所以你可以安全地认为这是可能的。 – einpoklum