// Copyright 1998-2018 Epic Games, Inc. All Rights Reserved. #pragma once #include "inc.h" /** * Does a boolean AND of the ::Value static members of each type, but short-circuits if any Type::Value == false. */ template struct TAnd; template struct TAndValue { enum { Value = TAnd::Value }; }; template struct TAndValue { enum { Value = false }; }; template struct TAnd : TAndValue { }; template <> struct TAnd<> { enum { Value = true }; }; /** * Does a boolean OR of the ::Value static members of each type, but short-circuits if any Type::Value == true. */ template struct TOr; template struct TOrValue { enum { Value = TOr::Value }; }; template struct TOrValue { enum { Value = true }; }; template struct TOr : TOrValue { }; template <> struct TOr<> { enum { Value = false }; }; /** * Does a boolean NOT of the ::Value static members of the type. */ template struct TNot { enum { Value = !Type::Value }; };