diff --git a/compiler/src/dotty/tools/dotc/parsing/Parsers.scala b/compiler/src/dotty/tools/dotc/parsing/Parsers.scala index 63b6e9f8ac51..b0aa2dca577d 100644 --- a/compiler/src/dotty/tools/dotc/parsing/Parsers.scala +++ b/compiler/src/dotty/tools/dotc/parsing/Parsers.scala @@ -2217,6 +2217,7 @@ object Parsers { val prefixExpr: Location => Tree = location => if isIdent && nme.raw.isUnary(in.name) && in.canStartExprTokens.contains(in.lookahead.token) + && in.lookahead.token != LBRACKET then val start = in.offset val op = termIdent() diff --git a/tests/pos/unary-with-type-params.scala b/tests/pos/unary-with-type-params.scala new file mode 100644 index 000000000000..127f138054e8 --- /dev/null +++ b/tests/pos/unary-with-type-params.scala @@ -0,0 +1,5 @@ +object Test { + def +[T](x: T): String = "x" + +[Int](6): String // Parser can treat + as identifier in non-unary context + +(6): Int // Parser prioritizes + as unary when possible +}