[英]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.