#pragma once #include #include #include namespace jvalidate::constraint { class ExtensionConstraint { public: struct Impl { virtual ~Impl() = default; virtual Status visit(extension::VisitorBase const &) const = 0; }; public: template static std::unique_ptr make(Args &&... args) { return std::make_unique( ExtensionConstraint{std::make_unique(std::forward(args)...)}); } public: std::unique_ptr pimpl; }; }