Dlaczego konwersje implicitConvers są wymagane dla ukrytych defektów, ale nie dla klas?

Z tego, co rozumiem, niejawne konwersje mogą spowodować potencjalnie trudny do zrozumienia kod lub kod cierpiący na inne problemy (być może nawet błędy?), Dlatego wymagają wyraźnego włączenia, aby móc korzystać z kodu bez uzyskiwania ostrzeżeń.

Jednakże, biorąc pod uwagę, że niejawne konwersje są w dużej części (jeśli nie przez większość czasu) używane do zawijania obiektu obiektem innego typu, tak samo jak ukryte klasy - byłbym wdzięczny za poprawienie mnie, jeśli się mylę -, dlaczego ten pierwszy wymaga importuscala.language.implicitConversions ale ten drugi nie?

object Main extends App {
  implicit class StringFoo(x: String) {
    def fooWithImplicitClass(): Unit =
      println("foo with implicit class")
  }
  // => silence.

  "asd".fooWithImplicitClass()

  /************************/

  class Foo(x: String) {
    def fooWithImplicitDef(): Unit =
      println("foo with implicit def")
  }
  implicit def string2Foo(x: String) = new Foo(x)
  // => warning: implicit conversion method string2Foo should be enabled

  "asd".fooWithImplicitDef()
}

questionAnswers(2)

yourAnswerToTheQuestion