假設我具有簽名[[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