最終更新日時: 2026年01月27日 16時36分10秒 (JST)
Akira Takahashi が更新

履歴 編集

function template
<format>

# std::visit_format_arg(C++20)(C++26で非推奨)

    namespace std {
      template<class Visitor, class Context>
      see below visit_format_arg(Visitor&& vis, basic_format_arg<Context> arg); // (1)
    }

この関数は、C++26から非推奨となった。代わりに`std::basic_format_arg::visit()`メンバ関数を使用すること。

## 概要

- (1) : `basic_format_arg`オブジェクトが現在保持している型に対応する関数を呼び出し、呼び出された関数の戻り値型で戻り値を返す

## 効果

次と等しい。

    return visit(forward<Visitor>(vis), arg.value);

ただし、便宜上、`basic_format_arg`は次のprivateメンバを持つとする。 (これらのprivateメンバは規格に含まれない)

    namespace std {
      template<class Context>
      class basic_format_arg {
      public:
        class handle;

      private:
        using charT = typename Context::char_type;

        variant<monostate, bool, charT,
                int, unsigned int, long long int, unsigned long long int,
                float, double, long double,
                const charT*, basic_string_view<charT>,
                const void*, handle> value;

        template<class Visitor, class Ctx>
        friend auto visit_format_arg(Visitor&& vis, basic_format_arg<Ctx> arg);
      };
    }

## 戻り値

- (1) : `basic_format_arg`オブジェクトが現在保持している型に対応する関数を呼び出した戻り値

## 実装例

    namespace std {
      template<class Visitor, class Context>
      auto visit_format_arg(Visitor&& vis, basic_format_arg<Context> arg)
      {
        return visit(forward<Visitor>(vis), arg.value);
      }
    }

## 備考

`basic_format_arg`オブジェクトが現在保持している型がユーザー定義型の場合、ビジターに渡されるのは`handle`型のオブジェクトになるので、元々どのような型だったかを知ることはできない。

## バージョン

### 言語

- C++20

### 処理系

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

## 参照

- P0645R10 Text Formatting
- P2637R3 Member `visit`