最終更新日時:
が更新

履歴 編集

class template
<functional>

std::logical_and

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

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

  template <>
  struct logical_and<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;
  };
}

概要

logical_andクラスは、論理積(AND)を計算する関数オブジェクトである。

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

備考

この関数オブジェクトによる論理演算は、演算子を使用する場合と違って、短絡評価はされないので注意。

メンバ関数

名前 説明
operator () x && y と等価

メンバ型

名前 説明
first_argument_type operator() の最初の引数の型。T と等価(Tvoid 以外の場合のみ)
second_argument_type operator() の2番目の引数の型。T と等価(Tvoid 以外の場合のみ)
result_type operator() の戻り値の型。bool と等価(Tvoid 以外の場合のみ)
is_transparent operator() が関数テンプレートである事を示すタグ型。
実装依存の型であるがあくまでタグ型であり、型そのものには意味はない。(Tvoid の場合のみ)

#include <iostream>
#include <functional>

int main()
{
  std::cout << std::boolalpha << std::logical_and<bool>()(true, true) << std::endl;
}

出力

true

参照