blob: f1b57b5a3485cf8806631be0d9b9ed05100d0e86 [file] [log] [blame]
// { dg-do compile { target c++23 } }
#include <format>
#include <chrono>
#include "custom_rep.h"
static_assert(std::enable_nonlocking_formatter_optimization<
std::chrono::day>);
static_assert(std::enable_nonlocking_formatter_optimization<
std::chrono::month>);
static_assert(std::enable_nonlocking_formatter_optimization<
std::chrono::year>);
static_assert(std::enable_nonlocking_formatter_optimization<
std::chrono::weekday>);
static_assert(std::enable_nonlocking_formatter_optimization<
std::chrono::weekday_indexed>);
static_assert(std::enable_nonlocking_formatter_optimization<
std::chrono::weekday_last>);
static_assert(std::enable_nonlocking_formatter_optimization<
std::chrono::month_day>);
static_assert(std::enable_nonlocking_formatter_optimization<
std::chrono::month_day_last>);
static_assert(std::enable_nonlocking_formatter_optimization<
std::chrono::month_weekday>);
static_assert(std::enable_nonlocking_formatter_optimization<
std::chrono::month_weekday_last>);
static_assert(std::enable_nonlocking_formatter_optimization<
std::chrono::year_month>);
static_assert(std::enable_nonlocking_formatter_optimization<
std::chrono::year_month_day>);
static_assert(std::enable_nonlocking_formatter_optimization<
std::chrono::year_month_day_last>);
static_assert(std::enable_nonlocking_formatter_optimization<
std::chrono::year_month_weekday>);
static_assert(std::enable_nonlocking_formatter_optimization<
std::chrono::year_month_weekday_last>);
#if _GLIBCXX_USE_CXX11_ABI || !_GLIBCXX_USE_DUAL_ABI
static_assert(std::enable_nonlocking_formatter_optimization<
std::chrono::local_info>);
static_assert(std::enable_nonlocking_formatter_optimization<
std::chrono::sys_info>);
#endif
template<typename Duration>
using local_time_fmt
= decltype(std::chrono::local_time_format(std::chrono::local_time<Duration>{}));
static_assert(std::enable_nonlocking_formatter_optimization<
std::chrono::seconds>);
static_assert(std::enable_nonlocking_formatter_optimization<
std::chrono::duration<float>>);
static_assert(std::enable_nonlocking_formatter_optimization<
std::chrono::duration<long long, std::mega>>);
static_assert(std::enable_nonlocking_formatter_optimization<
std::chrono::local_time<std::chrono::seconds>>);
static_assert(std::enable_nonlocking_formatter_optimization<
std::chrono::sys_time<std::chrono::seconds>>);
static_assert(std::enable_nonlocking_formatter_optimization<
std::chrono::utc_time<std::chrono::seconds>>);
static_assert(std::enable_nonlocking_formatter_optimization<
std::chrono::gps_time<std::chrono::seconds>>);
static_assert(std::enable_nonlocking_formatter_optimization<
std::chrono::tai_time<std::chrono::seconds>>);
static_assert(std::enable_nonlocking_formatter_optimization<
std::chrono::file_time<std::chrono::seconds>>);
static_assert(std::enable_nonlocking_formatter_optimization<
local_time_fmt<std::chrono::seconds>>);
using BufferedDuration = std::chrono::duration<Rep<void, int>>;
static_assert(!std::enable_nonlocking_formatter_optimization<
BufferedDuration>);
static_assert(!std::enable_nonlocking_formatter_optimization<
std::chrono::local_time<BufferedDuration>>);
static_assert(!std::enable_nonlocking_formatter_optimization<
std::chrono::sys_time<BufferedDuration>>);
static_assert(!std::enable_nonlocking_formatter_optimization<
std::chrono::utc_time<BufferedDuration>>);
static_assert(!std::enable_nonlocking_formatter_optimization<
std::chrono::gps_time<BufferedDuration>>);
static_assert(!std::enable_nonlocking_formatter_optimization<
std::chrono::tai_time<BufferedDuration>>);
static_assert(!std::enable_nonlocking_formatter_optimization<
std::chrono::file_time<BufferedDuration>>);
static_assert(!std::enable_nonlocking_formatter_optimization<
local_time_fmt<BufferedDuration>>);
template<>
inline constexpr bool
std::enable_nonlocking_formatter_optimization<Rep<void, long>> = true;
using NonBufferedRep = std::chrono::duration<Rep<void, long>>;
static_assert(!std::enable_nonlocking_formatter_optimization<
NonBufferedRep>);
static_assert(!std::enable_nonlocking_formatter_optimization<
std::chrono::local_time<NonBufferedRep>>);
static_assert(!std::enable_nonlocking_formatter_optimization<
std::chrono::sys_time<NonBufferedRep>>);
static_assert(!std::enable_nonlocking_formatter_optimization<
std::chrono::utc_time<NonBufferedRep>>);
static_assert(!std::enable_nonlocking_formatter_optimization<
std::chrono::gps_time<NonBufferedRep>>);
static_assert(!std::enable_nonlocking_formatter_optimization<
std::chrono::tai_time<NonBufferedRep>>);
static_assert(!std::enable_nonlocking_formatter_optimization<
std::chrono::file_time<NonBufferedRep>>);
static_assert(!std::enable_nonlocking_formatter_optimization<
local_time_fmt<NonBufferedRep>>);
using NonBufferedDuration = std::chrono::duration<Rep<void, short>>;
template<>
inline constexpr bool
std::enable_nonlocking_formatter_optimization<NonBufferedDuration> = true;
static_assert(std::enable_nonlocking_formatter_optimization<
NonBufferedDuration>);
static_assert(std::enable_nonlocking_formatter_optimization<
std::chrono::local_time<NonBufferedDuration>>);
static_assert(std::enable_nonlocking_formatter_optimization<
std::chrono::sys_time<NonBufferedDuration>>);
static_assert(std::enable_nonlocking_formatter_optimization<
std::chrono::utc_time<NonBufferedDuration>>);
static_assert(std::enable_nonlocking_formatter_optimization<
std::chrono::gps_time<NonBufferedDuration>>);
static_assert(std::enable_nonlocking_formatter_optimization<
std::chrono::tai_time<NonBufferedDuration>>);
static_assert(std::enable_nonlocking_formatter_optimization<
std::chrono::file_time<NonBufferedDuration>>);
static_assert(std::enable_nonlocking_formatter_optimization<
local_time_fmt<NonBufferedDuration>>);
#if _GLIBCXX_USE_CXX11_ABI || !_GLIBCXX_USE_DUAL_ABI
static_assert(std::enable_nonlocking_formatter_optimization<
std::chrono::zoned_time<std::chrono::seconds>>);
static_assert(!std::enable_nonlocking_formatter_optimization<
std::chrono::zoned_time<BufferedDuration>>);
static_assert(!std::enable_nonlocking_formatter_optimization<
std::chrono::zoned_time<NonBufferedRep>>);
static_assert(std::enable_nonlocking_formatter_optimization<
std::chrono::zoned_time<NonBufferedDuration>>);
struct MyTimeZone : std::chrono::time_zone
{};
template<>
struct std::chrono::zoned_traits<MyTimeZone>
{
static const MyTimeZone* default_zone();
static const MyTimeZone* locate_zone(std::string_view name);
};
static_assert(!std::enable_nonlocking_formatter_optimization<
std::chrono::zoned_time<std::chrono::seconds, MyTimeZone>>);
static_assert(!std::enable_nonlocking_formatter_optimization<
std::chrono::zoned_time<BufferedDuration, MyTimeZone>>);
static_assert(!std::enable_nonlocking_formatter_optimization<
std::chrono::zoned_time<NonBufferedRep, MyTimeZone>>);
static_assert(!std::enable_nonlocking_formatter_optimization<
std::chrono::zoned_time<NonBufferedDuration, MyTimeZone>>);
#endif