struct Banana
{
Banana () {}
Banana (float) {}
virtual Banana CreateByHalfLength(float halfLength) final {
return Banana::CreateByHalfLengthImpl(halfLength);
}
static Banana CreateByHalfLengthImpl(float halfLength) {
return Banana(halfLength * 2);
}
};
struct AdvancedBanana : Banana
{
static Banana CreateByHalfLength(float halfLength) { // Error
return Banana(halfLength * 2);
}
};
int main ()
{
}
c3RydWN0IEJhbmFuYQp7CiAgQmFuYW5hICgpIHt9CiAgQmFuYW5hIChmbG9hdCkge30KCiAgdmlydHVhbCBCYW5hbmEgQ3JlYXRlQnlIYWxmTGVuZ3RoKGZsb2F0IGhhbGZMZW5ndGgpIGZpbmFsICB7CiAgICByZXR1cm4gQmFuYW5hOjpDcmVhdGVCeUhhbGZMZW5ndGhJbXBsKGhhbGZMZW5ndGgpOwogIH0KICAKICBzdGF0aWMgQmFuYW5hIENyZWF0ZUJ5SGFsZkxlbmd0aEltcGwoZmxvYXQgaGFsZkxlbmd0aCkgewogICAgcmV0dXJuIEJhbmFuYShoYWxmTGVuZ3RoICogMik7IAogIH0KfTsKCnN0cnVjdCBBZHZhbmNlZEJhbmFuYSA6IEJhbmFuYQp7CiAgc3RhdGljIEJhbmFuYSBDcmVhdGVCeUhhbGZMZW5ndGgoZmxvYXQgaGFsZkxlbmd0aCkgeyAgLy8gRXJyb3IKICAgIHJldHVybiBCYW5hbmEoaGFsZkxlbmd0aCAqIDIpOyAKICB9Cn07CgppbnQgbWFpbiAoKQp7Cn0K