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

履歴 編集

class template
<functional>

std::negate

namespace std {
  // C++03
  template <typename T>
  struct negate {
    T operator()(const T& x) const;
    constexpr T operator ()(const T& x) const;
    using argument_type = T;
    using result_type   = T;
  };

  // C++14
  template <typename T = void>
  struct negate {
    constexpr T operator()(const T& x) const;
    using argument_type = T;
    using result_type   = T;
  };

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

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

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

概要

negateクラスは、符号反転を行う関数オブジェクトである。

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

メンバ関数

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

メンバ型

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

#include <iostream>
#include <functional>

int main()
{
  std::cout << std::negate<int>()(3) << std::endl;
  std::cout << std::negate<int>()(-3) << std::endl;
}

出力

-3
3

参照