The comma is being treated as a macro argument seperator, it does not do this with commas within parenthesizes.
If you are using Boost, they provide BOOST_PP_COMMA:
#include
#define FOO(a)
FOO(std::map);
You can also define your own:
#define COMMA ,
FOO(std::map);