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
prog.cpp:17:17: error: 'static Banana AdvancedBanana::CreateByHalfLength(float)' cannot be declared
static Banana CreateByHalfLength(float halfLength) { // Error
^
prog.cpp:6:18: error: since 'virtual Banana Banana::CreateByHalfLength(float)' declared in base class
virtual Banana CreateByHalfLength(float halfLength) final {
^