
//zero
// one
//  two
//   three
void foo(void);

struct A
{
public:
long_complicated_type f();
A& operator+(const A& other);
};

A& A::operator+(const A& other)
{}

B
operator+(const B& other)
{}

B foo(const B& other)
{}

class A
{
public:
explicit A(int);
int aFunct() { return a; }
int bFunc();
};

// Another file
int
A::bFunc()
{
// some code
}

template<typename T>
typename Foo<T>::Type Foo<T>::Func()
{
}

void Foo::bar() {}

namespace foo {
Foo::Foo() {}
}

Foo::~Foo() {}

class Object
{
	~Object(void);
};

template <class T> 
void SampleClassTemplate<T>::connect()
{
}

template <>
inline void bar<MyType>(MyType r)
{
    foo(r);
}

template <T>
inline void baz<>(T r)
{
    foo(r);
}
