Don't generate override and final on definitions

This commit is contained in:
Jonathan Müller 2017-06-15 21:10:34 +02:00
commit f596ef398f
2 changed files with 10 additions and 5 deletions

View file

@ -577,8 +577,13 @@ namespace
output << keyword("virtual") << whitespace; output << keyword("virtual") << whitespace;
} }
void write_suffix_virtual(code_generator::output& output, const cpp_virtual& virt) void write_suffix_virtual(code_generator::output& output, const cpp_virtual& virt,
bool is_definition)
{ {
if (is_definition)
// don't include it in definition
return;
if (is_overriding(virt)) if (is_overriding(virt))
output << whitespace << keyword("override"); output << whitespace << keyword("override");
if (is_final(virt)) if (is_final(virt))
@ -667,7 +672,7 @@ namespace
detail::write_type(output, func.return_type(), ""); detail::write_type(output, func.return_type(), "");
} }
write_suffix_virtual(output, func.virtual_info()); write_suffix_virtual(output, func.virtual_info(), func.is_definition());
write_function_body(output, func, is_pure(func.virtual_info())); write_function_body(output, func, is_pure(func.virtual_info()));
} }
return static_cast<bool>(output); return static_cast<bool>(output);
@ -701,7 +706,7 @@ namespace
write_noexcept(output, op, write_noexcept(output, op,
need_ws || output.formatting().is_set(formatting_flags::operator_ws)); need_ws || output.formatting().is_set(formatting_flags::operator_ws));
write_suffix_virtual(output, op.virtual_info()); write_suffix_virtual(output, op.virtual_info(), op.is_definition());
write_function_body(output, op, is_pure(op.virtual_info())); write_function_body(output, op, is_pure(op.virtual_info()));
} }
return static_cast<bool>(output); return static_cast<bool>(output);
@ -740,7 +745,7 @@ namespace
<< punctuation("(") << punctuation(")"); << punctuation("(") << punctuation(")");
write_noexcept(output, dtor, output.formatting().is_set(formatting_flags::operator_ws)); write_noexcept(output, dtor, output.formatting().is_set(formatting_flags::operator_ws));
write_suffix_virtual(output, dtor.virtual_info()); write_suffix_virtual(output, dtor.virtual_info(), dtor.is_definition());
write_function_body(output, dtor, is_pure(dtor.virtual_info())); write_function_body(output, dtor, is_pure(dtor.virtual_info()));
} }
return static_cast<bool>(output); return static_cast<bool>(output);

View file

@ -332,7 +332,7 @@ struct d : c
~d() final; ~d() final;
}; };
/// virtual d::~d() override; /// virtual d::~d();
d::~d() {} d::~d() {}
)"; )";