#ifndef EIGEN_STL_FUNCTORS_H
#define EIGEN_STL_FUNCTORS_H
#include "../InternalHeaderCheck.h"
namespace Eigen {
namespace internal {
functor_traits<std::multiplies<T>>;
functor_traits<std::divides<T>>;
functor_traits<std::plus<T>>;
functor_traits<std::minus<T>>;
functor_traits<std::negate<T>>;
functor_traits<std::logical_or<T>>;
functor_traits<std::logical_and<T>>;
functor_traits<std::logical_not<T>>;
functor_traits<std::greater<T>>;
functor_traits<std::less<T>>;
functor_traits<std::greater_equal<T>>;
functor_traits<std::less_equal<T>>;
functor_traits<std::equal_to<T>>;
functor_traits<std::not_equal_to<T>>;
#if (EIGEN_COMP_CXXVER < 17)
template <typename T>
struct functor_traits<std::unary_negate<T> > {
enum { Cost = 1 + functor_traits<T>::Cost, PacketAccess = false };
};
template <typename T>
struct functor_traits<std::binary_negate<T> > {
enum { Cost = 1 + functor_traits<T>::Cost, PacketAccess = false };
};
#endif
#ifdef EIGEN_STDEXT_SUPPORT
template <typename T0, typename T1>
struct functor_traits<std::project1st<T0, T1> > {
enum { Cost = 0, PacketAccess = false };
};
template <typename T0, typename T1>
struct functor_traits<std::project2nd<T0, T1> > {
enum { Cost = 0, PacketAccess = false };
};
template <typename T0, typename T1>
struct functor_traits<std::select2nd<std::pair<T0, T1> > > {
enum { Cost = 0, PacketAccess = false };
};
template <typename T0, typename T1>
struct functor_traits<std::select1st<std::pair<T0, T1> > > {
enum { Cost = 0, PacketAccess = false };
};
template <typename T0, typename T1>
struct functor_traits<std::unary_compose<T0, T1> > {
enum { Cost = functor_traits<T0>::Cost + functor_traits<T1>::Cost, PacketAccess = false };
};
template <typename T0, typename T1, typename T2>
struct functor_traits<std::binary_compose<T0, T1, T2> > {
enum { Cost = functor_traits<T0>::Cost + functor_traits<T1>::Cost + functor_traits<T2>::Cost, PacketAccess = false };
};
#endif
#ifdef EIGEN_FUNCTORS_PLUGIN
#include EIGEN_FUNCTORS_PLUGIN
#endif
}
}
#endif