如何使用 fmt 的范围支持可靠地格式化 std::vector<bool>?

问题描述 投票:0回答:1

我在尝试跨不同环境格式化布尔向量时遇到不一致的行为:

#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 19.1.0
  • 编译器资源管理器:GCC 主干
  • 编译器资源管理器:Clang trunk

但是失败了:

  • 本地 macOS (M1):Clang 19.1.1
    clang++ -std=c++23 -I libraries/fmt/include
  • 编译器资源管理器:Zig trunk

出现此错误:

error: implicit instantiation of undefined template 'fmt::detail::type_is_unformattable_for<std::vector<bool>, char>'

所有测试都使用 trunk 和 c++23 中的 fmt。 是什么导致了这种不一致以及如何解决它?

c++ templates gcc clang fmt
1个回答
0
投票

添加

fmt/std.h
解决了该问题,因为它为
vector<bool>
使用的代理类型提供了格式化程序。

#include <fmt/std.h>

更多详情:https://github.com/fmtlib/fmt/issues/4026

© www.soinside.com 2019 - 2024. All rights reserved.