//===----------------------------------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // UNSUPPORTED: c++03, c++11, c++14, c++17 // UNSUPPORTED: no-filesystem, no-localization, no-tzdb // XFAIL: libcpp-has-no-experimental-tzdb // XFAIL: availability-tzdb-missing // // zoned_time() -> zoned_time; // // template // zoned_time(sys_time) // -> zoned_time>; // // template // using time-zone-representation = // exposition only // conditional_t, // const time_zone*, // remove_cvref_t>; // // template // zoned_time(TimeZonePtrOrName&&) // -> zoned_time>; // // template // zoned_time(TimeZonePtrOrName&&, sys_time) // -> zoned_time, // time-zone-representation>; // // template // zoned_time(TimeZonePtrOrName&&, local_time, // choose = choose::earliest) // -> zoned_time, // time-zone-representation>; // // template // zoned_time(TimeZonePtrOrName&&, zoned_time, // choose = choose::earliest) // -> zoned_time, // time-zone-representation>; #include #include #include #include "test_offset_time_zone.h" namespace cr = std::chrono; // Verify the results of the constructed object. int main(int, char**) { { // zoned_time() -> zoned_time; cr::zoned_time zt; static_assert(std::same_as>); } { // template // zoned_time(sys_time) // -> zoned_time>; { cr::zoned_time zt{cr::sys_time{cr::nanoseconds{0}}}; static_assert(std::same_as>); } { cr::zoned_time zt{cr::sys_time{cr::seconds{0}}}; static_assert(std::same_as>); } { cr::zoned_time zt{cr::sys_time{cr::days{0}}}; static_assert(std::same_as>); } } { // template // zoned_time(TimeZonePtrOrName&&) // -> zoned_time>; { // Name { cr::zoned_time zt{"UTC"}; static_assert(std::same_as>); } { cr::zoned_time zt{std::string{"UTC"}}; static_assert(std::same_as>); } { cr::zoned_time zt{std::string_view{"UTC"}}; static_assert(std::same_as>); } } { // TimeZonePtr { cr::zoned_time zt{static_cast(nullptr)}; static_assert(std::same_as>); } { cr::zoned_time zt{offset_time_zone{}}; static_assert( std::same_as< decltype(zt), cr::zoned_time>>); } { cr::zoned_time zt{offset_time_zone{}}; static_assert( std::same_as>>); } { cr::zoned_time zt{offset_time_zone{}}; static_assert( std::same_as>>); } { cr::zoned_time zt{offset_time_zone{}}; static_assert( std::same_as< decltype(zt), cr::zoned_time>>); } // There are no requirements on the TimeZonePtr type. { cr::zoned_time zt{0}; static_assert(std::same_as>); } { cr::zoned_time zt{0.0}; static_assert(std::same_as>); } { cr::zoned_time zt{cr::seconds{}}; static_assert(std::same_as>); } } } { // template // zoned_time(TimeZonePtrOrName&&, sys_time) // -> zoned_time, // time-zone-representation>; { // Name { cr::zoned_time zt{"UTC", cr::sys_time{}}; static_assert(std::same_as>); } { cr::zoned_time zt{"UTC", cr::sys_time{}}; static_assert(std::same_as>); } } { // TimeZonePtr { cr::zoned_time zt{static_cast(nullptr), cr::sys_time{}}; static_assert(std::same_as>); } { cr::zoned_time zt{static_cast(nullptr), cr::sys_time{}}; static_assert(std::same_as>); } { cr::zoned_time zt{offset_time_zone{}, cr::sys_time{}}; static_assert(std::same_as< decltype(zt), cr::zoned_time>>); } { cr::zoned_time zt{offset_time_zone{}, cr::sys_time{}}; static_assert( std::same_as< decltype(zt), cr::zoned_time>>); } } } { // template // zoned_time(TimeZonePtrOrName&&, local_time, // choose = choose::earliest) // -> zoned_time, // time-zone-representation>; { // Name { cr::zoned_time zt{"UTC", cr::local_time{}}; static_assert(std::same_as>); } { cr::zoned_time zt{"UTC", cr::local_time{}, cr::choose::earliest}; static_assert(std::same_as>); } } { // TimeZonePtr { cr::zoned_time zt{cr::locate_zone("UTC"), cr::local_time{}}; static_assert(std::same_as>); } { cr::zoned_time zt{cr::locate_zone("UTC"), cr::local_time{}, cr::choose::earliest}; static_assert(std::same_as>); } } } { // template // zoned_time(TimeZonePtrOrName&&, zoned_time, // choose = choose::earliest) // -> zoned_time, // time-zone-representation>; { // Name { cr::zoned_time zt{ "UTC", cr::zoned_time>{}}; static_assert(std::same_as>); } { cr::zoned_time zt{"UTC", cr::zoned_time>{}, cr::choose::earliest}; static_assert(std::same_as>); } } { // TimeZonePtr { cr::zoned_time zt{ cr::locate_zone("UTC"), cr::zoned_time>{}}; static_assert(std::same_as>); } { cr::zoned_time zt{cr::locate_zone("UTC"), cr::zoned_time>{}, cr::choose::earliest}; static_assert(std::same_as>); } } } return 0; }