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