OpenC++ Home Page logo


OpenC++ is a version of C++ with a Metaobject Protocol. In other words, it is a tool of source-code translation for C++. Programmers can easily implement various kinds of translation so that they can define new syntax, new annotation, and new object behavior. OpenC++ is useful if they need, for example,

  • Developing extensions to C++, to provide support for things like parallelism, distribution, concurrency, and persistence.
  • Adding domain-, application-, or class-specific compiler optimizations.
  • Building their own version of (runtime) MOP for C++.


The OpenC++ project has moved to the open source world! new

Now, the latest version of this software is available from the OpenC++ pages on (Developer's page). The development is open to the public; please join with us. If you're interested in the current snapshot, it is on the CVS.


OpenC++ version 2.5.12 is now available (October, 2001). The version 2.5.x supports SunOS 4.x, Solaris, Linux, FreeBSD, OpenBSD, Irix, and Win95/NT with Visual C++ 5.0 (Visual C++ is required for running it.)

The license for OpenC++ follows the spirit of open source. Although the license is not one of the well-known standard license like GPL since it was developed long time ago and some part of the code is owned by Xerox, you can include this software in your commercial product without opening the source code to the public. For more details, see the copyright notices.

Mailing List...

The mailing list is
Note that only the list subscribers can post a message to the list.

For the subscription, vist this page.

The list archive is available on

Old versions...

OpenC++ version 2.4 (released on March 7, 1997) 

This version includes OpenC++ mentioned in the OOPSLA'95 paper. This distribution package includes source code of the compiler, a manual, and sample programs. To run it, GNU g++ 2.x running on SunOS 4.x, Solaris 2.x, or Linux is required. Other platforms have not been tested. This package is free to use. For details, see the copyright notice.  

OpenC++ version 1 is also available (version 1.2 distribution package, 358Kb)


A Metaobject Protocol for C++

Shigeru Chiba 
In Proceedings of the ACM Conference on Object-Oriented Programming Systems, Languages, and Applications (OOPSLA), page 285-299, October 1995.
(An overview of the compile-time reflection provided by OpenC++)

Macro Processing in Object-Oriented Languages (IEEE copyright notices)

Shigeru Chiba
In Proc. of Technology of Object-Oriented Languages and Systems (TOOLS Pacific '98), Australia, November, IEEE Press, 1998.
(Details of the OpenC++ MOP.)

Implementation Techniques for Efficient Reflective Languages

Shigeru Chiba 
Technical Report 97-06, Department of Information Science, University of Tokyo, 1997. 
(A mini survey of implementation techniques for reflective languages)

Designing an Extensible Distributed Language with a Meta-Level Architecture 

Shigeru Chiba and Takashi Masuda 
In Proceedings of European Conference on Object Oriented Programming (ECOOP), LNCS 707, page 482-501, 1993. 
(An overview of runtime reflection provided by OpenC++ version 1)

Avoiding Confusion in Metacircularity:The Meta-Helix

Shigeru Chiba, Gregor Kiczales and John Lamping
In Proceedings of ISOTAS'96, LNCS 1049, page 157-172, March 1996.
(A design note of meta architectures)

OpenC++ Programmer's Guide for Version 2 

Shigeru Chiba 
Technical Report SPL-96-024, Xerox PARC, 1996.

Open C++ Programmer's Guide 

Shigeru Chiba 
Technical Report 93-3, Department of Information Science, University of Tokyo, 1993. 

Related Work...

Several papers about research using OpenC++ version 2 were presented at OOPSLA'98 workshop on reflective programming in C++ and Java.

The OpenC++ project is one of research activities on reflection, metaobject protocols, and open implementation. To know more about the background, see the Open Implementation home page. 

OpenC++ version 1 is found in the following papers as a research platform: 

A Metaobject Architecture for Fault Tolerant Distributed Systems: The FRIENDS Approach 
Jean-Charles Fabre and Tanguy Pérennou. 
IEEE Transactions on Computers, Special Issue on Dependability of Computing Systems, vol. 47, no. 1, pp. 78-95, Jan. 1998. 

Using Metaobject Protocols to Implement Atomic Data Types 
Robert J. Stroud and Zhixue Wu. 
In Proceedings of the 9th European Conference on Object-Oriented Programming, LNCS 952, page 168-189, 1995. 

Related Projects...


Javassist is yet another reflective system for Java. It is a class library for editing bytecodes at runtime in Java. Unlike other similar systems, Javassist is based on reflection and hence it provides higher-level abstraction.


OJ is a Java preprocessor with a metaobject protocol similar to OpenC++.

[Last Updated: Oct. 14, 2007]

Shigeru Chiba