Other Constraints

An aggregate type cannot contain itself. (An attempt to do so would result in an infinite sized aggregate.) When generating a field of an aggregate T using TV_ttf_add_row, the named type may not be T, or anything which directly or indirectly contains a T as a member. If you do need to do something like that, use a pointer or reference.

As an illustration, consider this:

class A { ... };

class B { A a; ... };

 

int TV_ttf_display_type ( const A *a )

{

(void) TV_ttf_add_row ( ... );

return TV_ttf_format_ok;

}

int TV_ttf_display_type ( const B *b )

{

(void) TV_ttf_add_row ( ... );

(void) TV_ttf_add_row ( "a", "A", &(b->a) );

return TV_ttf_format_ok;

}

Note the following:

TV_ttf_display_type ( const A *a ) may not add an object of type A (direct inclusion) nor one of type B (indirect inclusion).

When viewing an object of type B, TotalView will invoke TV_ttf_add_row ( const B * ), and then TV_ttf_add_row ( const *A ).