¿Por qué se requiere implitConversions para las definiciones implícitas pero no para las clases?

Según tengo entendido, las conversiones implícitas pueden resultar en un código potencialmente difícil de entender, o en un código que sufra otros problemas (¿quizás incluso errores?), Por lo que requieren una habilitación explícita para poder usarlos en el código sin recibir advertencias.

Sin embargo, dado que las conversiones implícitas se usan en gran parte (si no es la mayoría del tiempo) para envolver un objeto con un objeto de otro tipo, y también lo son las clases implícitas, le agradecería que me corrija si me equivoco ¿Por qué los primeros requieren la importación descala.language.implicitConversions Pero este último no?

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()
}

Respuestas a la pregunta(2)

Su respuesta a la pregunta