當我使用
template <typename TMap>
typename TMap::referent_type * func(TMap & map, typename TMap::key_type key)
{ ... }
什麼是兩者的目的「類型名「在第二行?
它似乎會觸發編譯時警告(VS2008:C4346),但它只是一個「你聲稱這是一個類型」?
即實際檢查TMap::referent_type
實際上是否是模板被實例化時產生的,但似乎仍有C++標準的要求,但代碼正確解析正確。
是否有任何實例需要typename來解決歧義?或者還有更多呢?
我必須承認,對於C++標籤的人會提出這樣一個關於模板編程的基本問題,我們必須承認會有點吃驚。你有沒有編譯過比Visual Studio更好的編譯器? (如,更符合標準) – 2010-08-17 14:56:53
@Mathieu:我已經使用了Watcom C++ 9.0-10.5,「觀察」了C++的更精細的細節,並且我用Comeau進行了一些測試 - 儘管從未在生產中。 VS的失控在這裏真的值得嗎? ---我缺少的關鍵洞察是'T :: SubType * p'會被解析爲算術表達式。 ---我沒有注意到我有一個C++標籤,但我確實知道C++每個月大概還是讓我感到驚訝。 – peterchen 2010-08-17 15:06:18