std::quoted предназначен для работы со стандартными IOStreams и boost::format использует такой поток. Поскольку boost::format предназначен для работы с пользовательскими типами, последний не является деталью реализации. Поэтому меня не удивило, что это компилируется:
boost::format("%1%") % std::quoted(std::string{"Hello, world"});
Но мне кажется, что это уже выходит за рамки деталей реализации. Это должно сработать? И это портативное? std::quoted имеет неопределенный тип возвращаемого значения, и неясно, будет ли работать его передача через operator%.
Чтобы уточнить комментарий 273K: boost::format использует внутренний поток для сбора форматированного вывода. Любой определяемый пользователем тип, который вы передаете форматтеру через operator%, передается во внутренний поток через operator<<. А поскольку std::quoted имеет operator<<, он работает с boost::format.





Предполагается, что это работает: Как это работает и Обоснование:
принимать любые типы переменных, полагаясь на потоки для фактического преобразования в строку. В частности, это касается пользовательских типов, для которых эффекты параметров форматирования должны быть интуитивно естественными.
std::quotedвозвращает объект неопределенного типа, и этот тип расширяется другомoperator<<.