2013-05-31 31 views
1

我使用包含在Xcode 4.6.2(4H1003)中的Clang。常量類型在C++中的常量別名11

Apple LLVM version 4.2 (clang-425.0.28) (based on LLVM 3.2svn) 

目前我的編譯器不會爲此代碼編譯錯誤。

using AA = int const; 
static AA const aa = 0; 

因爲我不熟悉準確的C++ 11規格,我不知道什麼是正確的行爲。

  1. 雙重錯誤const關鍵字。
  2. const on using是不允許的。
  3. 這是一些特殊情況。
  4. 這是編譯器錯誤。

標準的預期行爲是什麼?

+0

[dcl.type.cv]/1 「冗餘CV-資格被忽略[注:例如,這些可以通過typedefs.年底注]出臺」 – dyp

+0

我的問題是相關或複製到這一個:http://stackoverflow.com/questions/5781222/duplicate-const-qualifier-allowed-in-c-but-not-in-c – Eonil

+0

可能的重複[爲什麼編譯器不給錯誤當typedef常量指針與額外的常量?](http://stackoverflow.com/questions/11534126/why-compiler-doesnt-give-error-when-typedef-const-pointer-is-used-with-extra- CO) – Eonil

回答

2

這已經被C++ 98允許 - 可以通過typedef名稱和模板參數多次引入cv-qualifiers - 它們只是被摺疊。如果這不被允許,通用代碼將會有很多問題。同樣的事情也發生在參考文獻中。

§7.1.6.1 [dcl.type.cv] p1

有兩個CV-預選賽constvolatile。 [...]
冗餘cv資格被忽略。 [注意:例如,這些可以通過typedefs引入。 末端注]