c++ 为什么std::println(std::vector)无法编译?

ruoxqz4g  于 8个月前  发布在  其他
关注(0)|答案(1)|浏览(181)

我有以下代码:

#include <print>
#include <vector>

int main() {
    std::vector<int> v{1, 2, 3};
    std::println("{}", v);
}

字符串
在这产生的众多错误中,有(clang++ -std=c++23 -stdlib=libc++https://godbolt.org/z/3z9Tseh37):

[...]/format_arg_store.h:167:17: error: static assertion failed due to [...]
  167 |   static_assert(__arg != __arg_t::__none, "the supplied type is not formattable");
      |                 ^~~~~~~~~~~~~~~~~~~~~~~~


这让我很困惑,因为根据cppreference C++23 compiler support page,libc++支持std::println并实现了P2286: Formatting Ranges
是我做错了什么,还是这是一个标准的库错误?

6vl6ewon

6vl6ewon1#

是我做错了什么,还是这是一个标准的库错误?
<format>中指定了要支持的字符串范围,但标准没有指定<print>必须包含<format>。(因此只需包含<format>以使代码格式良好)。
但是,从用户友好的Angular 来看,包含<print>应该支持格式化范围。
关于这一点已经有一个公开的问题,请参见71925

相关问题