
The testsuite will automatically select C++20 for these tests now, and removing the hardcoded -std option allows them to be tested for C++23 and C++26 as well. libstdc++-v3/ChangeLog: * testsuite/20_util/duration/arithmetic/overflow_c++20.cc: Remove dg-options. * testsuite/20_util/duration/io.cc: Likewise. * testsuite/std/time/clock/file/io.cc: Likewise. * testsuite/std/time/clock/file/members.cc: Likewise. * testsuite/std/time/clock/file/overview.cc: Likewise. * testsuite/std/time/clock/gps/1.cc: Likewise. * testsuite/std/time/clock/gps/io.cc: Likewise. * testsuite/std/time/clock/local/io.cc: Likewise. * testsuite/std/time/clock/system/io.cc: Likewise. * testsuite/std/time/clock/tai/1.cc: Likewise. * testsuite/std/time/clock/tai/io.cc: Likewise. * testsuite/std/time/clock/utc/1.cc: Likewise. * testsuite/std/time/clock/utc/io.cc: Likewise. * testsuite/std/time/clock/utc/leap_second_info.cc: Likewise. * testsuite/std/time/day/1.cc: Likewise. * testsuite/std/time/day/io.cc: Likewise. * testsuite/std/time/exceptions.cc: Likewise. * testsuite/std/time/format.cc: Likewise. * testsuite/std/time/hh_mm_ss/1.cc: Likewise. * testsuite/std/time/hh_mm_ss/109772.cc: Likewise. * testsuite/std/time/hh_mm_ss/io.cc: Likewise. * testsuite/std/time/is_am/1.cc: Likewise. * testsuite/std/time/is_pm/1.cc: Likewise. * testsuite/std/time/make12/1.cc: Likewise. * testsuite/std/time/make24/1.cc: Likewise. * testsuite/std/time/month/1.cc: Likewise. * testsuite/std/time/month/io.cc: Likewise. * testsuite/std/time/month_day/1.cc: Likewise. * testsuite/std/time/month_day/io.cc: Likewise. * testsuite/std/time/month_day_last/1.cc: Likewise. * testsuite/std/time/month_day_last/io.cc: Likewise. * testsuite/std/time/month_weekday/1.cc: Likewise. * testsuite/std/time/month_weekday/io.cc: Likewise. * testsuite/std/time/month_weekday_last/1.cc: Likewise. * testsuite/std/time/month_weekday_last/io.cc: Likewise. * testsuite/std/time/parse.cc: Likewise. * testsuite/std/time/syn_c++20.cc: Likewise. * testsuite/std/time/time_zone/get_info_local.cc: Likewise. * testsuite/std/time/time_zone/get_info_sys.cc: Likewise. * testsuite/std/time/time_zone/requirements.cc: Likewise. * testsuite/std/time/traits/is_clock.cc: Likewise. * testsuite/std/time/tzdb/1.cc: Likewise. * testsuite/std/time/tzdb/leap_seconds.cc: Likewise. * testsuite/std/time/tzdb_list/1.cc: Likewise. * testsuite/std/time/tzdb_list/requirements.cc: Likewise. * testsuite/std/time/weekday/1.cc: Likewise. * testsuite/std/time/weekday/io.cc: Likewise. * testsuite/std/time/weekday_indexed/io.cc: Likewise. * testsuite/std/time/weekday_last/1.cc: Likewise. * testsuite/std/time/weekday_last/io.cc: Likewise. * testsuite/std/time/year/1.cc: Likewise. * testsuite/std/time/year/2.cc: Likewise. * testsuite/std/time/year/io.cc: Likewise. * testsuite/std/time/weekday_indexed/1.cc: Likewise. * testsuite/std/time/year_month/1.cc: Likewise. * testsuite/std/time/year_month/2.cc: Likewise. * testsuite/std/time/year_month/io.cc: Likewise. * testsuite/std/time/year_month_day/1.cc: Likewise. * testsuite/std/time/year_month_day/2.cc: Likewise. * testsuite/std/time/year_month_day/3.cc: Likewise. * testsuite/std/time/year_month_day/4.cc: Likewise. * testsuite/std/time/year_month_day/io.cc: Likewise. * testsuite/std/time/year_month_day_last/1.cc: Likewise. * testsuite/std/time/year_month_day_last/2.cc: Likewise. * testsuite/std/time/year_month_day_last/io.cc: Likewise. * testsuite/std/time/year_month_weekday/1.cc: Likewise. * testsuite/std/time/year_month_weekday/2.cc: Likewise. * testsuite/std/time/year_month_weekday/3.cc: Likewise. * testsuite/std/time/year_month_weekday/io.cc: Likewise. * testsuite/std/time/year_month_weekday_last/1.cc: Likewise. * testsuite/std/time/year_month_weekday_last/2.cc: Likewise. * testsuite/std/time/year_month_weekday_last/io.cc: Likewise. * testsuite/std/time/zoned_time/1.cc: Likewise. * testsuite/std/time/zoned_time/custom.cc: Likewise. * testsuite/std/time/zoned_time/deduction.cc: Likewise. * testsuite/std/time/zoned_time/io.cc: Likewise. * testsuite/std/time/zoned_time/req_neg.cc: Likewise. * testsuite/std/time/zoned_time/requirements.cc: Likewise. * testsuite/std/time/zoned_traits.cc: Likewise.
74 lines
1.9 KiB
C++
74 lines
1.9 KiB
C++
// { dg-do run { target c++20 } }
|
|
// { dg-require-effective-target tzdb }
|
|
|
|
#include <chrono>
|
|
#include <set>
|
|
#include <stdexcept>
|
|
#include <testsuite_hooks.h>
|
|
|
|
struct local_tz
|
|
{
|
|
local_tz() : name(std::chrono::current_zone()->name()) { }
|
|
|
|
explicit local_tz(std::string_view name) : name(name) { }
|
|
|
|
template<typename Dur>
|
|
std::chrono::sys_time<Dur> to_sys(const std::chrono::local_time<Dur>& d)
|
|
{ return std::chrono::locate_zone(name)->to_sys(d); }
|
|
|
|
template<typename Dur>
|
|
std::chrono::sys_time<Dur> to_local(const std::chrono::sys_time<Dur>& d)
|
|
{ return std::chrono::locate_zone(name)->to_sys(d); }
|
|
|
|
template<typename Dur>
|
|
std::chrono::sys_info get_info(const std::chrono::sys_time<Dur>& d)
|
|
{ return std::chrono::locate_zone(name)->get_info(d); }
|
|
|
|
struct indirect_cmp
|
|
{
|
|
bool operator()(const local_tz* lhs, const local_tz* rhs) const
|
|
{ return lhs->name < rhs->name; }
|
|
};
|
|
|
|
bool eq(const std::chrono::time_zone* tz) const noexcept
|
|
{ return name == tz->name(); }
|
|
|
|
private:
|
|
std::string_view name;
|
|
};
|
|
|
|
template<> struct std::chrono::zoned_traits<const local_tz*>
|
|
{
|
|
static const local_tz* default_zone()
|
|
{
|
|
return locate_zone(std::chrono::current_zone()->name());
|
|
}
|
|
|
|
static const local_tz* locate_zone(std::string_view name)
|
|
{
|
|
static std::set<const local_tz*, local_tz::indirect_cmp> zones;
|
|
local_tz tz(name);
|
|
if (auto z = zones.find(&tz); z != zones.end())
|
|
return *z;
|
|
if (std::chrono::locate_zone(name))
|
|
return *zones.insert(new local_tz(tz)).first;
|
|
throw std::runtime_error("zone not found");
|
|
}
|
|
};
|
|
|
|
void
|
|
test_custom_tzptr()
|
|
{
|
|
using namespace std::chrono;
|
|
|
|
zoned_time<seconds, const local_tz*> z;
|
|
VERIFY( z.get_time_zone()->eq(std::chrono::current_zone()) );
|
|
|
|
zoned_time<seconds, const local_tz*> z2(std::string_view("Europe/London"));
|
|
VERIFY( z2.get_time_zone()->eq(std::chrono::locate_zone("Europe/London")) );
|
|
}
|
|
|
|
int main()
|
|
{
|
|
test_custom_tzptr();
|
|
}
|