最終更新日時: 2026年01月20日 12時05分18秒 (JST)
Akira Takahashi が更新

履歴 編集

function
<format>

# std::range_formatter::format(C++23)

    template <ranges::input_range R, class FormatContext>
      requires formattable<ranges::range_reference_t<R>, charT> &&
               same_as<remove_cvref_t<ranges::range_reference_t<R>>, T>
    typename FormatContext::iterator
      format(R&& r, FormatContext& ctx) const; // (1) C++23
    template <ranges::input_range R, class FormatContext>
      requires formattable<ranges::range_reference_t<R>, charT> &&
               same_as<remove_cvref_t<ranges::range_reference_t<R>>, T>
    constexpr typename FormatContext::iterator
      format(R&& r, FormatContext& ctx) const; // (1) C++26

## 概要

受け取ったRangeオブジェクト`R`を書式化する。

## 効果

- `parse()`メンバ関数で解析した書式文字列の指定に基づいて、`r`の値を文字列に変換し、以下を`ctx.out()`に出力する：
  - Range書式として`s` (文字列として出力)が指定された場合、`basic_string<charT>(from_range, r)`を出力する
  - そうでなく、Range書式として`?s` (デバッグ文字列として出力)が指定された場合、`basic_string<charT>(from_range, r)`に引用符を付け、エスケープシーケンスをエスケープして出力する
  - そうでなければ、
    - 開きカッコを出力する
    - Range `r`の各要素`e`について、
      - `underlying()`の`formatter`で`e`を書式化して出力する
      - 最後の要素でなければ、区切り文字を出力する
    - 閉じカッコを出力する

## 戻り値

出力がおわった位置の出力イテレータを返す。

## バージョン

### 言語

- C++23

### 処理系

- Clang: ??
- GCC: ??
- Visual C++: ??

## 参照

- P3391R2 `constexpr std::format`
  - C++26から`constexpr`に対応した