+/** Base class for feature converters. */
+class FeatureConverter: protected TraversingVisitor
+{
+protected:
+ Stage *stage = 0;
+ Features features;
+
+ FeatureConverter() = default;
+
+public:
+ void apply(Stage &, const Features &);
+protected:
+ virtual void apply() = 0;
+
+ void unsupported(const std::string &);
+
+ bool check_version(const Version &) const;
+ bool check_extension(bool Features::*) const;
+};
+