E074: Value Classes May Not Be Abstract

This error is emitted when a value class (a class extending AnyVal) is declared as abstract.

Value classes must be concrete because they are meant to be inlined by the compiler. An abstract value class cannot be instantiated and therefore cannot serve its purpose of avoiding object allocation.


Example

abstract class Wrapper(val value: Int) extends AnyVal

Error

-- [E074] Syntax Error: example.scala:1:15 -------------------------------------
1 |abstract class Wrapper(val value: Int) extends AnyVal
  |               ^
  |               Value classes may not be abstract

Solution

// Remove the abstract modifier
class Wrapper(val value: Int) extends AnyVal
// For abstraction, use a universal trait
trait Numeric extends Any:
  def value: Int

class Wrapper(val value: Int) extends AnyVal with Numeric