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);
};