最終更新日時: 2024年09月11日 16時03分22秒 (JST)
Akira Takahashi が更新

履歴 編集

variable
<format>

# std::enable_nonlocking_formatter_optimization(C++26)

    namespace std {
      template <class T>
      constexpr bool enable_nonlocking_formatter_optimization = false; // (1) C++26
    }

## 概要

`std::print()`と`std::println()`の効率的な実装を有効にする。

この値が`true`で定義される場合、文字列フォーマットされた文字列のストリームへの書き込み時に、余分な動的メモリ確保を行わない。

とくに指定されない限り、標準ライブラリで`std::formatter`の特殊化が定義される型に対して、各ヘッダは以下の特殊化を定義する：

    template<>
    inline constexpr bool enable_nonlocking_formatter_optimization<T> = true;

Rangeに対しては、以下が定義される：

    template <ranges::input_range R>
      requires (format_kind<R> != range_format::disabled)
    inline constexpr bool enable_nonlocking_formatter_optimization<R> = false;

`std::pair`および`std::tuple`に対しては、以下が定義される：

    template <class... Ts>
    inline constexpr bool enable_nonlocking_formatter_optimization<pair-or-tuple<Ts...>> =
      (enable_nonlocking_formatter_optimization<Ts> && ...);

## 備考

- ユーザーは、任意のCV修飾されないユーザー定義型でこの型の特殊化を定義できる

## バージョン

### 言語

- C++26

### 処理系

- Clang: 18 ❌
- GCC: 14 ❌
- Visual C++: 2022 Update 7 ❌

## 関連項目

- `std::print()`
- `std::chrono::duration`に対する`enable_nonlocking_formatter_optimization`
- `std::chrono::zoned_time`に対する`enable_nonlocking_formatter_optimization`

## 参照

- P3107R5 Permit an efficient implementation of `std::print`
- P3235R3 `std::print` more types faster with less memory