最終更新日時(UTC):
が更新

履歴 編集

<chrono>

std::chrono::zoned_time::推論補助(C++20)

namespace std::chrono {
  zoned_time() -> zoned_time<seconds>;                            // (1) C++20

  template <class Duration>
  zoned_time(sys_time<Duration>)
    -> zoned_time<common_type_t<Duration, seconds>>;              // (2) C++20

  template <class TimeZonePtr, class Duration>
  zoned_time(TimeZonePtr, sys_time<Duration>)
    -> zoned_time<common_type_t<Duration, seconds>, TimeZonePtr>; // (3) C++20

  template <class TimeZonePtr, class Duration>
  zoned_time(TimeZonePtr, local_time<Duration>, choose = choose::earliest)
    -> zoned_time<common_type_t<Duration, seconds>, TimeZonePtr>; // (4) C++20

  template <class TimeZonePtr, class Duration>
  zoned_time(TimeZonePtr, zoned_time<Duration>, choose = choose::earliest)
    -> zoned_time<common_type_t<Duration, seconds>, TimeZonePtr>; // (5) C++20

  zoned_time(string_view) -> zoned_time<seconds>;                 // (6) C++20

  template <class Duration>
  zoned_time(string_view, sys_time<Duration>)
    -> zoned_time<common_type_t<Duration, seconds>>;              // (7) C++20

  template <class Duration>
  zoned_time(string_view, local_time<Duration>, choose = choose::earliest)
    -> zoned_time<common_type_t<Duration, seconds>>;              // (8) C++20

  template <class Duration, class TimeZonePtr, class TimeZonePtr2>
  zoned_time(TimeZonePtr, zoned_time<Duration, TimeZonePtr2>, choose = choose::earliest)
    -> zoned_time<Duration, TimeZonePtr>;                         // (9) C++20
}

概要

std::chrono::zoned_timeクラステンプレートの型推論補助。

  • (1) : デフォルトコンストラクタ。秒単位の時間間隔を使用する
  • (2) : sys_time<Duration>からの推論。Durationsecondsの共通の時間間隔を使用する
  • (3) : 任意のタイムゾーンオブジェクトへのポインタ型とsys_time<Duration>からの推論。Durationsecondsの共通の時間間隔と、受け取ったタイムゾーンオブジェクトへのポインタ型を使用する
  • (4) : 任意のタイムゾーンオブジェクトへのポインタ型、local_time<Duration>choose型からの推論。Durationsecondsの共通の時間間隔と、受け取ったタイムゾーンオブジェクトへのポインタ型を使用する
  • (5) : 任意のタイムゾーンオブジェクトへのポインタ型、zoned_time<Duration>choose型からの推論。Durationsecondsの共通の時間間隔と、受け取ったタイムゾーンオブジェクトへのポインタ型を使用する
  • (6) : タイムゾーン名のstring_view型からの推論。秒単位の時間間隔を使用する
  • (7) : タイムゾーン名のstring_view型と、sys_time<Duration>からの推論。Durationsecondsの共通の時間間隔を使用する
  • (8) : タイムゾーン名のstring_view型、local_time<Duration>choose型からの推論。Durationsecondsの共通の時間間隔と、受け取ったタイムゾーンオブジェクトへのポインタ型を使用する
  • (9) : タイムゾーン名のstring_view型、zoned_time<Duration>choose型からの推論。Durationsecondsの共通の時間間隔と、受け取ったタイムゾーンオブジェクトへのポインタ型を使用する

備考

#include <cassert>
#include <chrono>
#include <type_traits>

namespace chrono = std::chrono;

int main()
{
  chrono::sys_time now = chrono::system_clock::now();
  chrono::sys_time<chrono::seconds> now_sec = chrono::floor<chrono::seconds>(now);

  // デフォルトコンストラクタ
  chrono::zoned_time z1;
  static_assert(std::is_same_v<
    decltype(z1),
    chrono::zoned_time<chrono::seconds>
  >);

  // システム時間からの推論。
  // システム時間がもっている時間間隔を使用する。
  // (システム時間の時間間隔がマイクロ秒なら、zoned_timeもマイクロ秒)
  chrono::zoned_time z2{now};
  static_assert(std::is_same_v<
    decltype(z2),
    chrono::zoned_time<decltype(now)::duration>
  >);

  // 秒単位のシステム時間からは、秒単位のzoned_timeに推論される
  chrono::zoned_time z3{now_sec};
  static_assert(std::is_same_v<
    decltype(z3),
    chrono::zoned_time<chrono::seconds>
  >);

  // タイムゾーンを与える場合も同様
  chrono::zoned_time z4{chrono::locate_zone("Asia/Tokyo"), now};
  chrono::zoned_time z5{"Asia/Tokyo", now};

  static_assert(std::is_same_v<
    decltype(z4),
    chrono::zoned_time<decltype(now)::duration, chrono::time_zone*>
  >);
  static_assert(std::is_same_v<
    decltype(z5),
    chrono::zoned_time<decltype(now)::duration, chrono::time_zone*>
  >);
}

出力

バージョン

言語

  • C++20

処理系

  • Clang: (9.0時点で実装なし)
  • GCC: (9.2時点で実装なし)
  • Visual C++: (2019 Update 3時点で実装なし)