<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/60164>60164</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[libc++][format] Some contiguous ranges cannot be formatted due to lack of `data` member function
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
JMazurkiewicz
</td>
</tr>
</table>
<pre>
Example:
```c++
#include <format>
#include <ranges>
using namespace std;
struct Conti {
const char* begin() const;
const char* end() const;
// const char* data() const;
// size_t size() const;
};
static_assert(ranges::contiguous_range<Conti>);
static_assert(ranges::sized_range<Conti>);
static_assert(formattable<Conti, char>);
int main() {
Conti conti;
(void) format("{}\n", conti);
}
```
Expected: *correct compilation with `-fsyntax-only`*
Got:
```console
/opt/compiler-explorer/clang-trunk-20230120/bin/../include/c++/v1/__format/range_formatter.h:172:67: error: no member named 'data' in 'Conti'
return __formatter.format(basic_string_view<_CharT>{__range.data(), __range.size()}, __ctx);
~~~~~~~ ^
[MORE LINES]
```
Possible solution:
https://github.com/llvm/llvm-project/blob/097f42602d83926a9d5e7fbe3d0bb8ef5c733183/libcxx/include/__format/range_formatter.h#L172
We should use `ranges::data` and `ranges::size` here.
Compiler explorer: https://godbolt.org/z/M4jPhM9Pv
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJycVUlv4zYU_jX05cGGTFrbwQcvUdFi0g46BXo0uDxbnKFJg6QSJ4f-9oKSvCQzDTA1BMrk28jv-x7FQ9AHi7gk-Zrk2wnvYuv88rdH_tr5bxqftXydCKdelg9nfjwZJGxFsi3JLmORDY8kdJ2eYZUybaXpFAJhm73zRx4Je_iR0XN7wHAz9mMXtD2A5UcMJy4RQlSEre89QvSdjLBxNmog5WgDAJDOhgiy5Z7QFQg8aEtoRWg9WK55vvdFq955wuhKaENo885d8cj_M_MYEfQr7mL_-nFqUm6_OxmPWu54COgjodUFoBVhK5mOe-hcF3b9MmGbHoEEH62viT5Kkbaifip6oC9yYW4RdDPA8DZyGLWNcORX1N-QM_Alh6pv4KqenFbJf1RLCqYpttySfGPTJBUdqt-VLLfvhHi_lYfzCWVERVjicCWd9ygjSHc8acOjdhaedWyBFNl0H15s5Oeps-YlpaFvdP6LizflXzXvbHAGL7Ju3CkS2gzZ0U_xfDLOo09rhtvDNPrOfpvSjLJsTjNCG5FQamYzQpuxJZLv2Em0eZoT2ux2F0SanrVxGtHPWsJW85IStirKdET03vn0xzo44lGg73tIAaHloNYStE2zkcXyxgCAx9h5C7u7AlcuBA9a7kL02h52TxqfCdvsNi33fyUJlOvdoKjZrScSW5fVm_wTXb1BxvM9jfC_f_8MPyD55QbJ149__PkAn379_eELyT-Sx2cXghYGITjTJTVcKW5jPPUN07fxQce2EzPpjoQ2xjxdXtOTd19RJmqEcYLQJqvL_YIWGVUVq2nBa5VjuRfIVCZEhftclozNK5YSaCHP5zfMf0g1ZZ8S13fb_xshtK4zCrqAScP3fd4zUWTArXpv6ukoMmjR4-w-4WZULlyVy1bwDgqnhDNx5vyB0OaV0OZx8fVz-1h_fpqoJVM1q_kEl_OiXNB5VdBy0i5RlgulijqfI6NZofJSzkVdiEVVZpUSxUQvLz0xpwu2KGeV4qjoflHUUlS5YGSR4ZFrM0uop9oTHUKHyyKbF4uJ4QJN6L9glFp8ht6Ybox8O_HLninRHQJZZEaHGG5Zoo6m__QlMsa2y7ckX4885Fv44o4It3sXBiBBcmtdBIFw4UiB6hCiA8PlN3D7hPqFhLEZ952VSWaTzpvlT0usP1UgtOlP_W8AAAD__wOeSDE">