#include <iostream>

template<typename DATA>
struct ATB
{
    int data;
    ATB() : data(0) {}
};


template<typename DATA,
	 typename DerivedType >
class A : public ATB<DATA>
{
public:
    static DerivedType const DEFAULT_INSTANCE;
};

template<typename DATA, typename DerivedType>
const DerivedType A<DATA, DerivedType>::DEFAULT_INSTANCE;

class B : public A<int, B>
{

};

int main()
{
    B b;
    // If this if-block is removed then GDB shall
    // not infinitely recurse when trying to print b.

    return 0;		// marker
}
