我在尝试跨不同环境格式化布尔向量时遇到不一致的行为:
#include <vector>
#include <fmt/core.h>
#include <fmt/ranges.h>
int main() {
std::vector<bool> vec = {true, false, true};
fmt::print("Vector contents: {}\n", vec);
return 0;
}
这在多种环境下都可以正常工作:
但是失败了:
clang++ -std=c++23 -I libraries/fmt/include
出现此错误:
error: implicit instantiation of undefined template 'fmt::detail::type_is_unformattable_for<std::vector<bool>, char>'
所有测试都使用 trunk 和 c++23 中的 fmt。 是什么导致了这种不一致以及如何解决它?
添加
fmt/std.h
解决了该问题,因为它为 vector<bool>
使用的代理类型提供了格式化程序。
#include <fmt/std.h>