将std::quoted传入boost::format是否合法且具备可移植性?
首先明确这段代码能编译的核心原因:
boost::format的operator%对用户自定义类型的支持逻辑,本质是将目标对象输出到其内部维护的标准IOStream对象中。而std::quoted返回的代理对象(虽标准未指定具体类型),核心特性就是重载了operator<<,可被标准流正确处理——这刚好匹配boost::format的处理逻辑,因此代码能正常编译运行。
接下来逐个解答你的疑问:
是否属于实现细节范畴?
严格来说,C++标准仅规定std::quoted的返回类型可配合operator<<工作,并未保证它能兼容其他接口。但boost::format的公开特性明确说明支持「可被流输出的用户自定义类型」,这种用法贴合boost::format的设计意图,不能完全归为「实现细节」——不过你依赖的是boost::format对接标准流的适配逻辑,而非std::quoted的公开契约。是否理应生效?
从语义匹配角度,两者设计目标高度契合:boost::format要支持所有可通过流输出的类型,std::quoted的代理对象就是为流输出而生的,因此这种用法理应生效。不过这是基于boost::format的现有设计,而非C++标准的强制要求。是否具备可移植性?
只要boost::format保持「支持所有重载operator<<的类型」这一核心特性,这段代码在不同平台的boost版本中都能正常工作。因为std::quoted的代理对象必须支持operator<<(这是标准强制要求),而boost的该行为属于公开特性的一部分,所以可移植性有保障——除非boost未来大幅修改这一核心设计。
内容的提问来源于stack exchange,提问作者MSalters

