#include <cstdlib>
template <class T>
class ClassA
{
public:
ClassA() : _length(0) { };
ClassA(size_t length) : _length(length) { };
size_t Length() const { return _length; };
void Length(size_t length) { _length = length; };
private:
size_t _length;
};
template <class T>
class ClassB : public ClassA<T>
{
public:
ClassB() { };
template <size_t N>
ClassB(const T (&value)[N]) :
ClassA<T>(N)
{
}
template <size_t N>
ClassB<T>& operator=(const T (&value)[N])
{
ClassA<T>::Length(N);
return *this;
}
};
int main()
{
ClassB<char> test = "Test";
return 0;
}
I2luY2x1ZGUgPGNzdGRsaWI+Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KY2xhc3MgQ2xhc3NBCnsKcHVibGljOgoJQ2xhc3NBKCkgOiBfbGVuZ3RoKDApIHsgfTsKCUNsYXNzQShzaXplX3QgbGVuZ3RoKSA6IF9sZW5ndGgobGVuZ3RoKSB7IH07CgoJc2l6ZV90IExlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIF9sZW5ndGg7IH07Cgl2b2lkIExlbmd0aChzaXplX3QgbGVuZ3RoKSB7IF9sZW5ndGggPSBsZW5ndGg7IH07Cgpwcml2YXRlOgoJc2l6ZV90IF9sZW5ndGg7Cgp9OwoKdGVtcGxhdGUgPGNsYXNzIFQ+CmNsYXNzIENsYXNzQiA6IHB1YmxpYyBDbGFzc0E8VD4KewpwdWJsaWM6CglDbGFzc0IoKSB7IH07CgoJdGVtcGxhdGUgPHNpemVfdCBOPgoJQ2xhc3NCKGNvbnN0IFQgKCZ2YWx1ZSlbTl0pIDoKCQlDbGFzc0E8VD4oTikKCXsKCX0KCgl0ZW1wbGF0ZSA8c2l6ZV90IE4+CglDbGFzc0I8VD4mIG9wZXJhdG9yPShjb25zdCBUICgmdmFsdWUpW05dKQoJewoJCUNsYXNzQTxUPjo6TGVuZ3RoKE4pOwoJCXJldHVybiAqdGhpczsKCX0KCn07CgppbnQgbWFpbigpCnsKCUNsYXNzQjxjaGFyPiB0ZXN0ID0gIlRlc3QiOwogICAgcmV0dXJuIDA7Cn0=