// { dg-options "-std=gnu++20" } // { dg-do compile { target c++20 } } // { dg-require-effective-target cxx11_abi } #include using namespace std::chrono; struct local_tz : time_zone { local_tz(); }; template<> struct std::chrono::zoned_traits { static auto default_zone() { return current_zone(); } static auto locate_zone(std::string_view name) { return std::chrono::locate_zone(name); } }; void test_ctad() { zoned_time z1; static_assert( std::is_same_v> ); zoned_time z2 = z1; static_assert( std::is_same_v ); zoned_time z3 = sys_time(); static_assert( std::is_same_v> ); const local_tz ltz; zoned_time z4(<z); static_assert( std::is_same_v> ); zoned_time z5("GMT"); static_assert( std::is_same_v> ); zoned_time z6(<z, sys_time()); static_assert( std::is_same_v> ); zoned_time z7(<z, sys_time()); static_assert( std::is_same_v> ); zoned_time z8("GMT", sys_time()); static_assert( std::is_same_v> ); zoned_time z9("GMT", sys_time()); static_assert( std::is_same_v> ); zoned_time z10(<z, local_time()); static_assert( std::is_same_v> ); zoned_time z11(<z, local_time(), choose::earliest); static_assert( std::is_same_v> ); zoned_time z12("GMT", local_time()); static_assert( std::is_same_v> ); zoned_time z13("GMT", local_time(), choose::earliest); static_assert( std::is_same_v> ); zoned_time z14(<z, z13); static_assert( std::is_same_v> ); zoned_time z15(<z, z12, choose::earliest); static_assert( std::is_same_v> ); zoned_time z16("GMT", z14); static_assert( std::is_same_v> ); zoned_time z17("GMT", z12, choose::earliest); static_assert( std::is_same_v> ); }