http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0707r0.pdf
В свежем пропосале Саттер предлагает добавить в С++ механизм для добавления пользовательских мета-типов. Автор отталкивается от наблюдения, что struct это просто class с public:, а enum class это просто class с константами, и предлагает обобщить этот подход и сделать его доступным разработчику. Вот пример реализации аналога interface из Java :
$class interface
{
    ~interface() noexcept {}
    constexpr {
        compiler.require($interface.variables().empty(),
                         "interfaces may not contain data");
        for (auto f : $interface.functions()) {
            compiler.require(!f.is_copy() && !f.is_move(),
                             "interfaces may not copy or move; consider a"
                             " virtual clone() instead");
            if (!f.has_access ()) f.make_public();
            compiler.require(f.is_public(),
                 "interface functions must be public");
            f.make_pure_virtual();
        }
    }
};
// User code (proposed C++)
interface IShape {
    int area() const ;
    void scale_by(double factor);
};










