General Presentation
====================
- Four space indenting, no tabs.
- Header guards follows the FILENAME_EXT convention - FOOBAR_H for foobar.h.
- In cases where it makes sense, try to keep 80 chars per line max.
- C++ style comments should be used for 1 liners. Never use /**/ for single 
  line comments.

Capitalisation
==============
- Classes, Structs: FooBar.
- Methods, Functions: FooBar.
- Method getters/setters: setFooBar, getFooBar.
- Method boolean returns: isFooBar.
- Variables: fooBar.

Classes, Structs
================
- Any constructors and destructors should be the first things in each scoping
  level, followed by an empty line.
- Arrange related groups of members (methods and data) such that there is an
  empty line between the groups.
- struct keyword should only be used for all public classes, such as data
  storage, or stateless functors.
- Constructor initializers goes on the same line as the ctor itself.
- Inheritance goes on the same line as class.
- Protection level is indented at the same level as class, public goes first,
  protected second, and private last.
- Starting braces go on the same line as class, end brances go on their own
  lines.
- Templates go on own line, the typename keyword should be used, not class.
- Methods should never have their bodies inside the class, except for extremely
  simple ones, such as bool isFoo() { return foo; }.
- If inline methods are prefered, they should be declared inline, and the body
  should appear below the class, in the header file.

Methods, Functions
=============================
- Simple functions that simply return a value for example, is allowed to keep
  the function body on the same line as the function/method name:
  int x() { return 42; }
- Starting and ending braces go on their own lines.
- Templates go on own line, the typename keyword should be used, not class.

Conditions
==========
- Opening braces go on the same line as the statement.
- Closing braces go on their own lines, except in the case of else / else if,
  where they will be on the same line as the else/else if statement.
- Braces should always be present.

Example - foobar.h
==================

#ifndef FOOBAR_H
#define FOOBAR_H

template <typename Foo>
class FooBar : public FourtyTwo<FooBar, Foo> {
public:
    FooBar() : myVar(true), flaf(false) {}
    ~FooBar() {}

    int getInt() const { return 42; }
    bool isReady() const { return true; }
    template <typename CallbackPolicy>
    inline void FancyCallback(CallbackPolicy callback);
private:
    bool myVar;
    bool flaf;
};

template <typename Foo>
template <typename CallbackPolicy>
inline void FooBar<Foo>::FancyCallback(CallbackPolicy callback)
{
    bool foo = isReady();

    if (myVar && flaf) {
        callback();
        otherStuff();
    } else if (flaf && !foo) {
        callback();
    } else {
        otherStuff();
    }
}

#endif
