#include <cstddef>
#include <iostream>
template < typename Derived>
struct B
{
typedef typename Derived:: Type Type2;
Type2 operator[ ] ( const std:: size_t i) { return Derived:: _kernel[ i] ; }
static const std:: size_t _size = sizeof ( Derived:: _kernel) / sizeof ( Type2) ;
} ;
template < typename T>
struct D : public B< D< T> >
{
typedef T Type;
static const T _kernel[ ] ;
} ;
template < typename T>
const T D< T> :: _kernel[ ] = { T( 1.0 ) } ;
int main( )
{
D< float > d;
std:: cout << D< float > :: _size << std:: endl ;
return 0 ;
}
I2luY2x1ZGUgPGNzdGRkZWY+CiNpbmNsdWRlIDxpb3N0cmVhbT4KCnRlbXBsYXRlIDx0eXBlbmFtZSBEZXJpdmVkPgpzdHJ1Y3QgQgp7Cgl0eXBlZGVmIHR5cGVuYW1lIERlcml2ZWQ6OlR5cGUgVHlwZTI7CgoJVHlwZTIgb3BlcmF0b3JbXSAoY29uc3Qgc3RkOjpzaXplX3QgaSkgeyByZXR1cm4gRGVyaXZlZDo6X2tlcm5lbFtpXTsgfQoKICAgIHN0YXRpYyBjb25zdCBzdGQ6OnNpemVfdCBfc2l6ZSA9IHNpemVvZihEZXJpdmVkOjpfa2VybmVsKSAvIHNpemVvZihUeXBlMik7Cn07Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4Kc3RydWN0IEQgOiBwdWJsaWMgQjwgRDxUPiA+CnsKICAgIHR5cGVkZWYgVCBUeXBlOwogICAgc3RhdGljIGNvbnN0IFQgX2tlcm5lbFtdOwp9OwoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CmNvbnN0IFQgRDxUPjo6X2tlcm5lbFtdID0ge1QoMS4wKX07CgppbnQgbWFpbigpCnsKCUQ8ZmxvYXQ+IGQ7CiAgICBzdGQ6OmNvdXQgPDwgRDxmbG9hdD46Ol9zaXplIDw8IHN0ZDo6ZW5kbDsKCXJldHVybiAwOwp9