最終更新日時(UTC): 2025年07月08日 15時33分39秒
Akira Takahashi が更新

履歴 編集

class template
<functional>

# std::multiplies

    namespace std {
      // C++03
      template <typename T>
      struct multiplies {
        T operator()(const T& x, const T& y) const;
        using first_argument_type  = T;
        using second_argument_type = T;
        using result_type          = T;
      };

      // C++14
      template <typename T = void>
      struct multiplies {
        constexpr T operator()(const T& x, const T& y) const;
        using first_argument_type  = T;
        using second_argument_type = T;
        using result_type          = T;
      };

      template <>
      struct multiplies<void> {
        template <class T, class U> constexpr auto operator()(T&& t, U&& u) const
          -> decltype(std::forward<T>(t) * std::forward<U>(u));
        using is_transparent = unspecified;
      };

      // C++20
      template <typename T = void>
      struct multiplies {
        constexpr T operator()(const T& x, const T& y) const;
      };

      template <>
      struct multiplies<void> {
        template <class T, class U> constexpr auto operator()(T&& t, U&& u) const
          -> decltype(std::forward<T>(t) * std::forward<U>(u));
        using is_transparent = unspecified;
      };
    }

## 概要

`multiplies`クラスは、乗算を行う関数オブジェクトである。

この関数オブジェクトは一切のメンバ変数を持たず、状態を保持しない。

## メンバ関数

名前 | 説明 | 対応バージョン
--- | --- | ---
`operator()` | `x * y` と等価 |

## メンバ型

名前 | 説明 | 対応バージョン
--- | --- | ---
`first_argument_type` | `operator()` の最初の引数の型。`T` と等価（`T` が `void` 以外の場合のみ） | C++17から非推奨 C++20で削除
`second_argument_type` | `operator()` の２番目の引数の型。`T` と等価（`T` が `void` 以外の場合のみ） | C++17から非推奨 C++20で削除
`result_type` | `operator()` の戻り値の型。`T` と等価（`T` が `void` 以外の場合のみ） | C++17から非推奨 C++20で削除
`is_transparent` | `operator()` が関数テンプレートである事を示すタグ型。 実装依存の型であるがあくまでタグ型であり、型そのものには意味はない。（`T` が `void` の場合のみ） | C++14

## 例

    #include <iostream>
    #include <functional>

    int main()
    {
      std::cout << std::multiplies<int>()(3, 2) << std::endl;
    }

### 出力

    6

## 参照

- N3421 Making Operator Functors greater<>
- N3657 Adding heterogeneous comparison lookup to associative containers (rev 4)
- N3789 Constexpr Library Additions: functional
- P0005R4 Adopt `not_fn` from Library Fundamentals 2 for C++17
- P0619R4 Reviewing deprecated facilities of C++17 for C++20