#pragma once // // This file is distributed under the MIT License. See LICENSE.md for details. // #include "revng/ADT/KeyedObjectContainer.h" #include "revng/Support/ErrorList.h" #include "revng/TupleTree/TupleLikeTraits.h" // clang-format off template concept TupleTreeCompatible = (KeyedObjectContainer or UpcastablePointerLike or TupleLike); // clang-format on template concept NotTupleTreeCompatible = not TupleTreeCompatible; template concept Verifiable = requires(const T &TT, ErrorList &EL) { { TT.verify(EL) }; { TT.verify() } -> std::same_as; }; template concept TupleTreeCompatibleAndVerifiable = (TupleTreeCompatible and Verifiable);