#include <memory>
template<typename T>
class GetProperty
{
private:
T (*get)();
public:
GetProperty(T (*get)())
{
this->get = get;
}
operator T()
{
return get();
}
template<typename S, typename T>
GetProperty<S> operator=(GetProperty<T> fool)
{
throw 0;
}
};
template<typename T>
class Vector
{
private:
struct LinkItem
{
public:
T* Item;
LinkItem* Next;
GetProperty<int> Length (&getLength);
LinkItem(T* Item = NULL, int length = 1, LinkItem* Next = NULL)
{
this->Item = Item;
this->length = length;
this->Next = Next;
}
LinkItem& operator =(LinkItem rhs)
{
this->Item = rhs.Item;
this->length = rhs.length;
this->Next = rhs.Next;
return *this;
}
private:
int length;
int getLength()
{
return length;
}
};
LinkItem* current;
...
};
int main() {
Vector<char> a;
}
I2luY2x1ZGUgPG1lbW9yeT4KCnRlbXBsYXRlPHR5cGVuYW1lIFQ+CmNsYXNzIEdldFByb3BlcnR5CnsKICAgIHByaXZhdGU6CiAgICAgICAgVCAoKmdldCkoKTsKICAgIHB1YmxpYzoKICAgICAgICBHZXRQcm9wZXJ0eShUICgqZ2V0KSgpKQogICAgICAgIHsKICAgICAgICAgICAgdGhpcy0+Z2V0ID0gZ2V0OwogICAgICAgIH0KICAgICAgICBvcGVyYXRvciBUKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBnZXQoKTsKICAgICAgICB9CiAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgUywgdHlwZW5hbWUgVD4KICAgICAgICBHZXRQcm9wZXJ0eTxTPiBvcGVyYXRvcj0oR2V0UHJvcGVydHk8VD4gZm9vbCkKICAgICAgICB7CiAgICAgICAgICAgIHRocm93IDA7CiAgICAgICAgfQogfTsKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiBjbGFzcyBWZWN0b3IKewogICAgcHJpdmF0ZToKICAgICAgICBzdHJ1Y3QgTGlua0l0ZW0KICAgICAgICB7CiAgICAgICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgICAgIFQqIEl0ZW07CiAgICAgICAgICAgICAgICBMaW5rSXRlbSogTmV4dDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZXRQcm9wZXJ0eTxpbnQ+IExlbmd0aCAoJmdldExlbmd0aCk7CiAgICAgICAgICAgICAgICBMaW5rSXRlbShUKiBJdGVtID0gTlVMTCwgaW50IGxlbmd0aCA9IDEsIExpbmtJdGVtKiBOZXh0ID0gTlVMTCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLT5JdGVtID0gSXRlbTsKICAgICAgICAgICAgICAgICAgICB0aGlzLT5sZW5ndGggPSBsZW5ndGg7CiAgICAgICAgICAgICAgICAgICAgdGhpcy0+TmV4dCA9IE5leHQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBMaW5rSXRlbSYgb3BlcmF0b3IgPShMaW5rSXRlbSByaHMpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy0+SXRlbSA9IHJocy5JdGVtOwogICAgICAgICAgICAgICAgICAgIHRoaXMtPmxlbmd0aCA9IHJocy5sZW5ndGg7CiAgICAgICAgICAgICAgICAgICAgdGhpcy0+TmV4dCA9IHJocy5OZXh0OwogICAgICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgcHJpdmF0ZToKICAgICAgICAgICAgaW50IGxlbmd0aDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBnZXRMZW5ndGgoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbGVuZ3RoOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgIH07CiAgICAgICAgICAgICAgICBMaW5rSXRlbSogY3VycmVudDsKICAgIC4uLgp9OwoKaW50IG1haW4oKSB7CiAgICBWZWN0b3I8Y2hhcj4gYTsKfQ==