[英]“expected nested-name-specifier before ‘const’ error” with typename const in g++
我在C ++中有這個代碼
template<typename T>
class DD
: public enumerables<T>
{
...
private:
typename const DD<T>& mContainer;
}
它給了我兩個錯誤消息:
typename const
代碼有什么問題? 它使用MSVC C ++編譯得很好。
typename DD<T>& const mContainer;
和const typename DD<T>& mContainer;
給我同樣的錯誤。
嗯,那個typename
什么? 您沒有引用嵌套類型,因此在那里完全沒有typename
。 我要說錯誤是由於不正當使用typename
引起的,而不是通過聲明部分或其他任何內容的排序引起的。
它應該是公正的
const DD<T>& mContainer;
甚至
const DD& mContainer;
除了在引入模板類型參數時,關鍵字typename
必須始終緊跟一個可選的global-scope ::
token,然后是一個嵌套的name-specifier ; 也就是說,有一個或多個名稱空間或類,每個名稱后跟::
token。
請參閱C ++標准中的語法規則:5.2(函數樣式轉換),7.1.5.3(詳細說明的類型說明符)和7.3.3(使用聲明)。
另外,14.6p5:“關鍵字typename
只能應用於限定名稱,但這些名稱不需要依賴。”
Microsoft的編譯器接受無效語法是錯誤的。
如果它幫助某人,因為我沒有看到它明確提到作為答案或評論(雖然引用C ++規范引用的答案提到它),如果你在依賴類型存在時收到此錯誤。
例如:
<template T>
void foo(typename const T::size_type & n);
修復是在typename
之前移動const
:
<template T>
void foo(const typename T::size_type & n);
確認這適用於GCC(4.9)和MSVC(2017)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.