当我使用
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