Elide the type when the const value is a placeholder `p` (#40)

diff --git a/src/v0.rs b/src/v0.rs
index 8f0ff35..ed3099b 100644
--- a/src/v0.rs
+++ b/src/v0.rs
@@ -548,13 +548,16 @@
         }
 
         let ty_tag = self.next()?;
+
+        if ty_tag == b'p' {
+            // We don't encode the type if the value is a placeholder.
+            return Ok(());
+        }
+
         if !supported_const_generic_type(ty_tag) {
             return Err(Invalid);
         }
 
-        if self.eat(b'p') {
-            return Ok(());
-        }
         // Negation on signed integers.
         if let b'a' | b's' | b'l' | b'x' | b'n' | b'i' = ty_tag {
             let _ = self.eat(b'n');
@@ -953,27 +956,30 @@
         }
 
         let ty_tag = parse!(self, next);
+
+        if ty_tag == b'p' {
+            // We don't encode the type if the value is a placeholder.
+            self.out.write_str("_")?;
+            return Ok(());
+        }
+
         if !supported_const_generic_type(ty_tag) {
             invalid!(self);
         }
 
-        if self.eat(b'p') {
-            self.out.write_str("_")?;
-        } else {
-            match ty_tag {
-                // Unsigned integer types.
-                b'h' | b't' | b'm' | b'y' | b'o' | b'j' => self.print_const_uint()?,
-                // Signed integer types.
-                b'a' | b's' | b'l' | b'x' | b'n' | b'i' => self.print_const_int()?,
-                // Bool.
-                b'b' => self.print_const_bool()?,
-                // Char.
-                b'c' => self.print_const_char()?,
+        match ty_tag {
+            // Unsigned integer types.
+            b'h' | b't' | b'm' | b'y' | b'o' | b'j' => self.print_const_uint()?,
+            // Signed integer types.
+            b'a' | b's' | b'l' | b'x' | b'n' | b'i' => self.print_const_int()?,
+            // Bool.
+            b'b' => self.print_const_bool()?,
+            // Char.
+            b'c' => self.print_const_char()?,
 
-                // This branch ought to be unreachable.
-                _ => invalid!(self),
-            };
-        }
+            // This branch ought to be unreachable.
+            _ => invalid!(self),
+        };
 
         if !self.out.alternate() {
             self.out.write_str(": ")?;
@@ -1118,6 +1124,10 @@
             "_RMCs4fqI2P2rA04_13const_genericINtB0_4CharKc2202_E",
             "<const_generic::Char<'∂'>>"
         );
+        t_nohash!(
+            "_RNvNvMCs4fqI2P2rA04_13const_genericINtB4_3FooKpE3foo3FOO",
+            "<const_generic::Foo<_>>::foo::FOO"
+        );
     }
 
     #[test]