I know there are a lot of template parsing bugs floating around, but I thought I'd throw another one into the mix. Apologies if it's already been reported.
Consider this code:template<typename T, DWORD dwMaxElem>
class CSmallMap
{
private:
	CMap<DWORD, DWORD, T*, T*> m_map;
public:
	POSITION GetStartPosition() const
	{
		return m_map.GetStartPosition();
	}
	void GetNextAssoc(POSITION &pos, DWORD &dw, T*& t) const
	{
		m_map.GetNextAssoc(pos, dw, t);
	}
};
class CFoo;
int main()
{
	CSmallMap<CFoo, 512> smallmapFoo;
	POSITION pos = smallmapFoo.GetStartPosition();
	while (pos)
	{
		DWORD dw;
		T* pT;
		smallmapFoo.GetNextAssoc(
When you get that far, the tooltip and the definition bar both think that the prototype of smallmapFoo.GetNextAssoc() is void GetNextAssoc (POSITION &pos, 512 &dw, CFoo*& CFoo) const
 — actually, not true, the tooltip is missing the const as well. But they both have 512 instead of DWORD.
Originally, I had a default parameter DWORD dwMaxElem=512 in the template definition, and didn't include the 512 in the declaration of smallmapFoo. Then the prototype wasvoid GetNextAssoc (POSITION &pos, dwMaxElem &dw, CFoo*& CFoo) const