libstdc++: Fix constraint on std::basic_format_string [PR108024]
Also remove some redundant std::move calls for return statements. libstdc++-v3/ChangeLog: PR libstdc++/108024 * include/std/format (basic_format_string): Fix constraint. * testsuite/std/format/format_string.cc: New test.
This commit is contained in:
parent
cb363fd9f1
commit
6c0f958401
2 changed files with 22 additions and 4 deletions
|
@ -110,7 +110,8 @@ namespace __format
|
|||
template<typename _CharT, typename... _Args>
|
||||
struct basic_format_string
|
||||
{
|
||||
template<convertible_to<basic_string_view<_CharT>> _Tp>
|
||||
template<typename _Tp>
|
||||
requires convertible_to<const _Tp&, basic_string_view<_CharT>>
|
||||
consteval
|
||||
basic_format_string(const _Tp& __s);
|
||||
|
||||
|
@ -609,7 +610,7 @@ namespace __format
|
|||
else
|
||||
for (_CharT __c : __str)
|
||||
*__out++ = __c;
|
||||
return std::move(__out);
|
||||
return __out;
|
||||
}
|
||||
|
||||
// Write STR to OUT with NFILL copies of FILL_CHAR specified by ALIGN.
|
||||
|
@ -664,7 +665,7 @@ namespace __format
|
|||
__out = __format::__write(std::move(__out), __str);
|
||||
__pad(__r, __out);
|
||||
|
||||
return std::move(__out);
|
||||
return __out;
|
||||
}
|
||||
|
||||
// A lightweight optional<locale>.
|
||||
|
@ -3626,7 +3627,8 @@ namespace __format
|
|||
/// @endcond
|
||||
|
||||
template<typename _CharT, typename... _Args>
|
||||
template<convertible_to<basic_string_view<_CharT>> _Tp>
|
||||
template<typename _Tp>
|
||||
requires convertible_to<const _Tp&, basic_string_view<_CharT>>
|
||||
consteval
|
||||
basic_format_string<_CharT, _Args...>::
|
||||
basic_format_string(const _Tp& __s)
|
||||
|
|
16
libstdc++-v3/testsuite/std/format/format_string.cc
Normal file
16
libstdc++-v3/testsuite/std/format/format_string.cc
Normal file
|
@ -0,0 +1,16 @@
|
|||
// { dg-options "-std=gnu++20" }
|
||||
// { dg-do compile { target c++20 } }
|
||||
|
||||
#include <format>
|
||||
|
||||
struct Str
|
||||
{
|
||||
consteval operator std::string_view() const { return ""; }
|
||||
operator std::string_view() = delete;
|
||||
};
|
||||
|
||||
// PR libstdc++/108024
|
||||
static_assert( std::is_constructible_v<std::format_string<>, const Str&> );
|
||||
static_assert( std::is_convertible_v<const Str&, std::format_string<>> );
|
||||
|
||||
constinit std::format_string<> s = Str();
|
Loading…
Add table
Reference in a new issue