Продвижение означает расширение представления типа. Например, объект типа short может быть продвинут до объекта типа int (такое преобразование называется целочисленным продвижением), а объект типа float может быть продвинут до объекта типа double, что известно как продвижение с плавающей точкой.
Преобразования отличаются от продвижения возможностью изменения значения, что может отрицательно сказаться на точности. Например, значение с плавающей точкой можно преобразовать в целое число, округлив до ближайшего целого. Кроме того, целочисленные значения и значения с плавающей точкой, перечисления без указания области видимости, указатели и типы указателей на члены могут быть преобразованы в логическое значение. Эти три ранга являются концепциями, унаследованными от языка C, и от них невозможно отказаться из-за необходимости поддерживать совместимость с C.
Это частично охватывает стандартные последовательности преобразований. Преобразования, определяемые пользователем, выполняются двумя способами: либо с помощью неявного конструктора, либо с помощью неявного оператора преобразования. Именно этот тип преобразований мы ожидаем в нашем примере: наш аргумент char const* преобразуется в std::string через неявный конструктор, который принимает char const*. Это так же очевидно, как нос на вашем лице. Но с какой целью мы втянули вас в это обсуждение особенностей разрешения перегрузок?