diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index c675af6803c..7eb96cbeb59 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -2436,7 +2436,8 @@ class parser { !self.token_is_keyword(~"of", self.look_ahead(1)) && !self.token_is_keyword(~"for", self.look_ahead(1)) && self.look_ahead(1) != token::BINOP(token::SLASH) && - self.look_ahead(1) != token::LT { + (self.look_ahead(1) != token::LT + || (self.look_ahead(1) == token::LT && tps.is_not_empty())) { // This is a new-style impl declaration. ident = @~"__extensions__"; // XXX: clownshoes diff --git a/src/test/run-pass/impl-implicit-trait.rs b/src/test/run-pass/impl-implicit-trait.rs new file mode 100644 index 00000000000..e9ca583005c --- /dev/null +++ b/src/test/run-pass/impl-implicit-trait.rs @@ -0,0 +1,20 @@ +enum option_ { + none_, + some_(T), +} + +impl option_ { + fn foo() -> bool { true } +} + +enum option__ { + none__, + some__(int) +} + +impl option__ { + fn foo() -> bool { true } +} + +fn main() { +} \ No newline at end of file