// { dg-do assemble  }
// GROUPS passed nested-classes
class BDDHeap {
public:
    BDDHeap();
    BDDHeap(const BDDHeap&);

    class Page {
    public:
	int i;
    };
    struct Pointer {
	Page *page;
	unsigned index;

	Pointer();
	Pointer(const BDDHeap& heap);
    };

    struct Half {
	struct {
	    Page *top;
	    Page **tail;
	} inuse;

	Half();
    };

    Half half[2];
    unsigned halfspace;
};

inline
BDDHeap::Pointer::Pointer(const BDDHeap& heap):
page(0),
index(0)
{
    Page *x = heap.half[heap.halfspace].inuse.top;
    page = x;
}

