summaryrefslogtreecommitdiffhomepage
path: root/src/kernel/NeKit/Vet.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/kernel/NeKit/Vet.h')
-rw-r--r--src/kernel/NeKit/Vet.h10
1 files changed, 9 insertions, 1 deletions
diff --git a/src/kernel/NeKit/Vet.h b/src/kernel/NeKit/Vet.h
index d4c1060f..86874085 100644
--- a/src/kernel/NeKit/Vet.h
+++ b/src/kernel/NeKit/Vet.h
@@ -13,13 +13,15 @@
#define NE_VETTABLE : public IVet
namespace Kernel {
+/// @brief Vet interface for objects.
struct IVet {
IVet() = default;
virtual ~IVet() = default;
NE_COPY_DEFAULT(IVet)
- operator bool() = delete;
+ /// @brief Start vetting object for validity.
+ auto DoVet() const { return false; }
};
template <typename T>
@@ -31,4 +33,10 @@ template <>
struct Vettable<IVet> final {
static constexpr bool kValue = true;
};
+
+/// @brief Concept version of Vettable.
+template <typename T, typename Fallback>
+concept IVettable = requires(IVet vettable, Fallback fallback) {
+ { Vettable<T>::kValue ? vettable.DoVet() : fallback(vettable) };
+};
} // namespace Kernel \ No newline at end of file