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;
};
// C++20
template <class T = void>
struct logical_and {
bool constexpr operator()(const T& x, const T& y) const;
};
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 と等価(T が void 以外の場合のみ) |
second_argument_type |
operator() の2番目の引数の型。T と等価(T が void 以外の場合のみ) |
result_type |
operator() の戻り値の型。bool と等価(T が void 以外の場合のみ) |
is_transparent |
operator() が関数テンプレートである事を示すタグ型。実装依存の型であるがあくまでタグ型であり、型そのものには意味はない。( T が void の場合のみ) |
例
#include <iostream>
#include <functional>
int main()
{
std::cout << std::boolalpha << std::logical_and<bool>()(true, true) << std::endl;
}
出力
true