Единственное, о чем я могу думать, это то, что у него нет оператора << для std :: string, поэтому он ищет преобразование и находит конструктор с одним аргументом TextMessage (std :: string). </p>
Часто рекомендуется предотвращать неожиданные вызовы конструкторов с одним аргументом, делая их явными.
explicit TextMessage(std::string _text):text(_text){}
Тогда он не будет рассматривать конструктор для неявных преобразований.