Status & Roadmap
Authors & License
Funding Ultimate++
Search on this site

SourceForge.net Logo

U++ usage and development cycle guide


After you have installed U++ and tried some examples, you might have came to conclusion that you are going to give it a try. Now first thing that you should do at this moment is to register in the Forum, where you will be able to post question, propose changes, report bugs etc. We strongly recommend to use the forum for all the communication, please do not try to post emails about U++ features directly to authors. The main reason for this is that if you ask about your problem in the forum, the discussion will get recorded for future searches. Also note that that there is "Newbie corner".

Important note: If you feel like you are going to be involved in U++ development, please provide an information about your real name (so that you can be later added to contributors lists without further asking etc...).

Reporting bugs

If you do think that you have found a problem with U++ library, you should report it in the forum. In order to make dealing with the issue as efficient as possible please, following steps would be highly appreciated:

Specify the version of U++ (also, you might want to try svn trunk or latest nightly build to find out whether the issue was already fixed)

Specify your host platform (OS and its version, compiler and possibly also something about HW).

Post a testcase that can be easily compiled. Testcase should be the minimal source code required to reproduce the problem. Usually, it takes a form of package, compressed as .zip and posted as attachment in the forum. Ideally, the name of package should start with your name, followed by '_' and something that makes its name unique, like 'mirek_bug25'. The reason for this naming convention is so that it does not name-clash with other testcases.

Describe a way how to reproduce a problem

After posting a bug report, please let us time to process it. Serious bugs are usually fixed in days, but sometimes less serious issue can take weeks. If problem cannot be fixed immediately, it is usually moved to redmine issue tracking system. You can check the what issues are currently open here.


U++ currently uses svn as cvs. Main svn is at svn://www.ultimatepp.org/upp.

SVN has anonymous read-only access, to commit you need credentials. U++ is using quite complex per-directory system of rights; rights to some directories are very restricted and to change the code there you need to post a patch (for code review). To obtain commit rights, please send forum PM message to user 'mirek'.

The SVN contains following subdirectories (U++ nests):



This contains "canonical" U++ library packages, albeit not all packages of this nest are exported to U++ releases at this time (sort of flaw).


Reference examples. These examples are meant as sort of "documentation by example". This gets exported into U++ releases.


Demonstration examples. This gets exported into U++ releases.


Companion examples for tutorials. This gets exported into U++ releases.


Community contributed packages. This gets exported into U++ releases.


Manual tests.


Automated tests.


Benchmarking code.


Special packages to test the autotest system.


Testing area for developing new GUI backends.


Obsoleted packages.


Archived abandoned code.


This is testing area, total mess. Best ignored.


All longer term U++ issues should be tracked. We are using Redmine issue tracking system for this, which is here.

Something about coding standards

General, I believe that there will be a little problems with coding standard, as the reason that made you use U++ was probably its way of doing things in the first place. However, to recapitulate:

Using delete is a big no-no (of course there might be exception).

You can generally avoid new in U++, so think twice before using it

Generally, classes should have default constructor - that is required to make in-place construction possible

Please do not propose adding/using shared (reference counted) smart pointers. We have worked hard to make possible to avoid them :)

Use tabs to provide block indents, tabsize is 4 characters

Use spaces for non-block indents, e.g. to indent second line of long if condition

There are no recommendation about C++ formatting, put spaces and place { as you please

All C++03 core language features are allowed, of course library wise U++ has preference over standard library

For now, U++ library code should be C++11 compatible, but C++11 should not be required. Parts intended to support C++11 features should be conditionally included using #ifdef CPP_11


Do you want to contribute?