diff --git a/tests/pos-macros/i16420/Macro.scala b/tests/pos-macros/i16420/Macro.scala new file mode 100644 index 000000000000..1ea9406a0b9b --- /dev/null +++ b/tests/pos-macros/i16420/Macro.scala @@ -0,0 +1,21 @@ +import scala.quoted.{Expr, Quotes, Type} + +object Converter { + private def handleUnit[R](f: Expr[Int ?=> R])(using q: Quotes, rt: Type[R]): Expr[Unit] = '{} + + class UnitConverter[R] extends Converter[EmptyTuple, R, Int ?=> R] { + inline def convert(inline f: Int ?=> R): Unit = ${ handleUnit[R]('f) } + } + + inline given unitHandler[R]: UnitConverter[R] = new UnitConverter[R] +} + + +trait Converter[T <: Tuple, R, F] { + inline def convert(inline fn: F): Unit +} + +abstract class Directive[R <: Tuple] { + inline def apply[O, F](using inline c: Converter[R, O, F])(inline fn: F): Unit = + c.convert(fn) +} diff --git a/tests/pos-macros/i16420/Test.scala b/tests/pos-macros/i16420/Test.scala new file mode 100644 index 000000000000..f63cc62306af --- /dev/null +++ b/tests/pos-macros/i16420/Test.scala @@ -0,0 +1,8 @@ +object Meow extends App { + case class Meow(s: String, i: Int) + + val dir: Directive[EmptyTuple] = ??? + dir { + Meow("asd", 123) + } +}