Eu tenho o seguinte código:
#include <print>
#include <vector>
int main() {
std::vector<int> v{1, 2, 3};
std::println("{}", v);
}
Entre os numerosos erros que isso produz, há ( 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");
| ^~~~~~~~~~~~~~~~~~~~~~~~
Isso me confunde porque de acordo com a página de suporte do compilador cppreference C++23 , o libc++ suporta std::println
e implementa P2286: Formatting Ranges .
Estou fazendo algo errado ou isso é um bug padrão da biblioteca?
Os intervalos de formatação são especificados para serem suportados em
<format>
, mas o padrão não especifica que<print>
devem incluir<format>
. (Portanto, basta incluir<format>
para deixar o código bem formado).No entanto, de uma perspectiva amigável, a inclusão
<print>
deve suportar intervalos de formatação.Já existe uma questão em aberto sobre isso, consulte 71925 .