簡體   English   中英

(int &&)5是一個整數常量表達式嗎?

[英]Is (int&&)5 an integral constant expression?

g ++接受代碼:

char b[static_cast<int&&>(5)];

N3936 [expr.const] / 3將術語定義為:

整數常量表達式是整數或未整數枚舉類型的表達式,隱式轉換為prvalue,其中轉換后的表達式是核心常量表達式。 [注意:這樣的表達式可以用作數組邊界[...]

我不確定因為表達式看起來像int&&但3.9中的整數類型的定義沒有提到引用類型。

如果不清楚,我的問題是: static_cast<int&&>(5)是一個整數常量表達式嗎?


背景:問題的動機如下:

char *c = (1 - 1);
char *d = static_cast<int&&>(0);

帶有-std=c++11所有最新版本的g++接受c行但拒絕d行。 C ++ 11標准表示空指針常量是值為0整型常量表達式 (這對C ++ 14來說已經改變了)。

clang(3.4.1和更高版本)拒絕-std=c++11模式中的c行。

所以看來g ++中存在一個錯誤,但我想確認錯誤是在b還是d定義中。

據我所知, static_cast<int&&>(5)確實是一個常量表達式,其結果是來自草案C ++ 11標准部分5.2.9 [expr.static.cast]的xvalue

[...]如果T是對象類型的右值引用,則結果為xvalue [...]

如果我們轉到第5.19節[expr.const],我們有:

條件表達式是核心常量表達式,除非[...]

我們有以下子彈:

  • 除非適用,否則左值到右值的轉換(4.1)

除以下異常:

  • 一個文字類型的glvalue,它引用一個生命周期尚未結束的非易失性臨時對象,用一個常量表達式初始化;

你還注意到:

clang(3.4.1及更高版本)錯誤地拒絕-std = c ++ 11模式中的c行。

但正如TC指出的那樣,因為這一變化是通過DR 903鏗鏘聲應用的,所以行為是有效的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM