title: Why does this rust HashMap macro no longer work?
body: <p>I previously used:</p>
  
  <pre><code>#[macro_export]
  macro_rules! map(
    { T:ident, $($key:expr =&gt; $value:expr),+ } =&gt; {
      {
        let mut m = $T::new();
        $(
          m.insert($key, $value);
        )+
        m
      }
   };
  )
  </code></pre>
  
  <p>To create objects, like this:</p>
  
  <pre><code>let mut hm = map! {HashMap, "a string" =&gt; 21, "another string" =&gt; 33};
  </code></pre>
  
  <p>However, this no longer seems to work. The compiler reports:</p>
  
  <pre><code>- Failed:
  macros.rs:136:24: 136:31 error: no rules expected the token `HashMap`
  macros.rs:136     let mut hm = map! {HashMap, "a string" =&gt; 21, "another string" =&gt; 33};
                                       ^~~~~~~
  </code></pre>
  
  <p>What's changed with macro definitions that makes this no longer work?</p>
  
  <p>The basic example below works fine:</p>
  
  <pre><code>macro_rules! foo(
    {$T:ident} =&gt; { $T; };
  )
  
  struct Blah;
  
  #[test]
  fn test_map_create() {
    let mut bar = foo!{Blah};
  }
  </code></pre>
  
  <p>So this seem to be some change to how the {T:ident, $(...), +} expansion is processed?</p>
  
  <p>What's going on here?</p>