1 #ifndef _BINARYSMET_HPP 2 #define _BINARYSMET_HPP 8 #include <ints/IntSeqCat.hpp> 9 #include <smet/BaseSmET.hpp> 10 #include <utility/Position.hpp> 24 #define STATIC_ASSERT_IS_BINARY_SMET(...) 41 #define PROVIDE_BINARY_SMET_REFS 48 #define PROVIDE_BINARY_SMET_SIMPLE_CREATOR(BINARY_SMET ) 50 template <typename SMET1, 52 typename=EnableIf<isSame<Unqualified<SMET1>,Unqualified<Ref1>>>, 53 typename=EnableIf<isSame<Unqualified<SMET2>,Unqualified<Ref2>>>> 54 explicit BINARY_SMET(SMET1&& smet1,SMET2&& smet2) : ref1(forw<SMET1>(smet1)),ref2(forw<SMET2>(smet2)) 61 #define SIMPLE_BINARY_SMET_BUILDER(BUILDER, 66 template <typename T1, 69 BINARY_SMET<T1,T2> BUILDER(T1&& smet1, 75 return BINARY_SMET<T1,T2>(forw<T1>(smet1),forw<T2>(smet2)); 81 #define FORWARD_IS_ALIASING_TO_PAIR_OF_REFS 83 template <typename Tref> 84 bool isAliasing(const Tref& alias) const 87 ref1.isAliasing(alias) or 88 ref2.isAliasing(alias); 103 template <
typename PrevPres=AbsentInBoth,
192 template <
typename MD1,
202 #define PROVIDE_MERGEABLE_COMPS_ACCORDING_TO_TWO_REFS 204 PairOfTensKindMergeability::template CompsMergeability< 205 typename RemRef<Ref1>::MergeableComps, 206 typename RemRef<Ref2>::MergeableComps, 208 PosOfRef2TcsInResTk>) #define DEFINE_HAS_MEMBER(TAG)
#define STATIC_ASSERT_IS_SMET(...)
decltype(auto) _compsMergeability(IntSeq< MDel1... > MD1, IntSeq< MDel2... > MD2, IntSeq< Head1, Tail1... > P1, IntSeq< Head2, Tail2... > P2)
#define PROVIDE_CRTP_CAST_OPERATOR(CLASS)
#define SFINAE_WORSEN_DEFAULT_VERSION_TEMPLATE_PARS
#define PROVIDE_SMET_REF(NUM)
Provide the reference to the object.
#define PROVIDE_MERGEABLE_COMPS(LONG_DESCRIPTION,...)
#define IS_ASSIGNABLE_ATTRIBUTE(LONG_DESCRIPTION,...)
Provides a isAssignable attribute.
#define SWALLOW_SEMICOLON_AT_GLOBAL_SCOPE
static constexpr int element()
Get the I element of the sequence.
#define SFINAE_WORSEN_DEFAULT_VERSION_ARGS_CHECK
Check that no extra arg is passed.
decltype(auto) operator+(T1 &&smet1, T2 &&smet2)
Implement smet1+smet2.
Smart Expression Templates.
#define SFINAE_WORSEN_DEFAULT_VERSION_ARGS
Provide empty list of args, used to unprioritize default version.
#define DECLAUTO
Short name for decltype(auto)
#define STATIC_ASSERT_HAS_MEMBER(TAG,...)
#define DEFINE_BASE_TYPE(TYPE,...)