class Base { public: virtual int get_foo () { return 1; } int base_function_only () { return 2; } }; class Foo : public Base { private: int foo_value; public: Foo () { foo_value = 0;} Foo (int i) { foo_value = i;} ~Foo () { } void set_foo (int value); int get_foo (); // Something similar to a constructor name. void Foofoo (); bool operator== (const Foo &other) { return foo_value == other.foo_value; } }; void Foo::set_foo (int value) { foo_value = value; } int Foo::get_foo () { return foo_value; } void Foo::Foofoo () { } namespace Test_NS { int foo; int bar; namespace Nested { int qux; } /* namespace Nested */ } /* namespace Test_NS */ /* The important thing with class baz is that both the class and the constructor must have a template argument, we need the symbol to look like: baz::baz(int,....whatever...) It doesn't really matter if TYPE_1 and TYPE_2 are the same or different, but we create them differently in this test as it makes debugging GDB slightly easier. */ template struct baz { template baz (int p1, T a) { s = 0; } S s; }; int main () { baz obj (2.3, 0.1); // Anonymous struct with method. struct { int get() { return 5; } } a; Foo foo1; foo1.set_foo (42); // Set breakpoint here. a.get(); // Prevent compiler from throwing 'a' away. return 0; }