The Aburiscript compiler is actively developing C++ support. It currently understands a substantial subset of C++ concepts, specifically targeting the Itanium ABI.
- Enums: Unscoped enums plus C++ scoped enums (
enum class/enum struct), fixed underlying types, scoped opaque declarations, nested qualified enumerator lookup, andswitch/ comparison support for scoped enum values. - Inline Variables: Namespace-scope inline variables plus
inline staticclass data members, including header-defined ODR-mergeable codegen andextern inlineredeclarations around a later inline definition. - Variable Templates: Namespace-scope primary variable templates plus explicit and partial specializations, with explicit template-id expressions such as
flag<int>materializing in both call and non-call contexts.
- Classes and Structs:
classandstructdefinitions, access control (public,private,protected). - Member Functions: Methods (with implicit
thispointer), static member functions, and static data members, including inline static data members. - Conversion Operators: Class conversion functions including dependent targets,
explicit operator boolin conditions, and explicit-conversion use throughstatic_cast. - Lifecycle: Constructors (including initializer lists) and Destructors (
~Class()). - Dynamic Allocation: Global and class-specific
new,new[],delete, anddelete[]operators.
- Single and Multiple Inheritance: Support for base classes and virtual bases.
- Virtual Methods: Dynamic dispatch via virtual method tables (V-Tables).
- RTTI (Run-Time Type Information):
typeidfor static and dynamic queries.dynamic_castfor safe pointer and reference downcasting/cross-casting.
- Member Pointers: Pointers to data members and member functions (
.*,->*).
- Try/Catch Blocks:
try { ... } catch (Type obj) { ... }including catch-allcatch (...). - Throw Expressions: Throwing objects and re-throwing (
throw;). - Noexcept:
noexceptspecifiers and predicates (noexcept(expr)). - Teardown: Automatic stack unwinding and destructor invocation upon exceptions.
- Templates: The templating engine is present but still expanding in coverage (partial instantiation, SFINAE, member variable templates, etc.).
- Operator Overloading: Coverage is still incomplete outside the currently implemented arithmetic/call/subscript/member-pointer/conversion paths.
- RTTI Surface Model:
typeidcurrently exposes a compiler-owned RTTI surface type rather thanstd::type_info, because standard library headers are not parsed yet. - Standard Library: Standard library integration (like
<iostream>,<vector>) is non-existent while the language feature set continues to expand.