簡體   English   中英

是否允許在decltype(自動)變量上使用cv限定符?

[英]Are cv-qualifiers allowed on decltype(auto) variables?

該標准規定了這一點

如果占位符是decltype(auto)類型說明符,則T應僅為占位符。

decltype(auto)*x7d = &i; //錯誤,聲明的類型不是普通的decltype(auto)

目前尚不清楚是否仍然允許使用cv-qualifiers。 如果他們被允許將是有道理的。 編譯器似乎在這個問題上存在分歧。 以下代碼被g ++接受被clang ++拒絕 ,vc ++似乎根本不支持decltype(auto)變量:

int main()
{
    const decltype(auto) sz_text{"test"};
}

要回答這個問題,我們需要引用前一段,它指出了T是什么。 在這種情況下, [dcl.type.auto.deduct] / 2表示(強調我的):

包含占位符類型的類型T和相應的初始化程序e確定如下:

  • 對於使用包含占位符類型的類型聲明的變量,T是變量的聲明類型, e是初始值設定項。 如果初始化是直接列表初始化,則初始化器應該是一個braced-init-list,只包含一個賦值表達式,e是賦值表達式;

在這種情況下, T整個聲明類型的sz_text ,cv-qualifiers和all。 你引用的段落很清楚,如果它包含decltype(auto)作為占位符,那么它必須是那個而已。

所以一個GCC錯誤。 還有一個報道過的

暫無
暫無

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

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