mirror of
https://github.com/gcc-mirror/gcc.git
synced 2026-05-06 14:59:39 +02:00
Users are not supposed to create objects of this type, and there's no reason it needs to be copyable. LWG 4061 makes it non-copyable and non-default constructible. libstdc++-v3/ChangeLog: PR libstdc++/114387 * include/std/format (basic_format_context): Define copy operations as deleted, as per LWG 4061. * testsuite/std/format/context.cc: New test.
37 lines
1.4 KiB
C++
37 lines
1.4 KiB
C++
// { dg-do compile { target c++20 } }
|
|
|
|
#include <format>
|
|
|
|
template<typename Context>
|
|
concept format_context_reqs = std::is_destructible_v<Context>
|
|
&& (!std::is_default_constructible_v<Context>)
|
|
&& (!std::is_copy_constructible_v<Context>)
|
|
&& (!std::is_move_constructible_v<Context>)
|
|
&& (!std::is_copy_assignable_v<Context>)
|
|
&& (!std::is_move_assignable_v<Context>)
|
|
&& requires (Context& ctx, const Context& cctx) {
|
|
typename Context::iterator;
|
|
typename Context::char_type;
|
|
requires std::same_as<typename Context::template formatter_type<int>,
|
|
std::formatter<int, typename Context::char_type>>;
|
|
{ ctx.locale() } -> std::same_as<std::locale>;
|
|
{ ctx.out() } -> std::same_as<typename Context::iterator>;
|
|
{ ctx.advance_to(ctx.out()) } -> std::same_as<void>;
|
|
{ cctx.arg(1) } -> std::same_as<std::basic_format_arg<Context>>;
|
|
};
|
|
|
|
template<typename Out, typename charT>
|
|
constexpr bool
|
|
check(std::basic_format_context<Out, charT>*)
|
|
{
|
|
using context = std::basic_format_context<Out, charT>;
|
|
static_assert( format_context_reqs<context> );
|
|
static_assert( std::is_same_v<typename context::iterator, Out> );
|
|
static_assert( std::is_same_v<typename context::char_type, charT> );
|
|
return true;
|
|
}
|
|
|
|
static_assert( check( (std::format_context*)nullptr) );
|
|
static_assert( check( (std::wformat_context*)nullptr) );
|
|
static_assert( check( (std::basic_format_context<char*, char>*)nullptr) );
|