Foo struct

Pathological cases of noexcept.

Constructors, destructors, conversion operators

Foo(Foo&&) defaulted noexcept
Combined default and noexcept.
Foo(const Foo&) noexcept(…)
Conditional noexcept.

Public functions

auto operator=(const Foo&) -> Foo& deleted noexcept(…)
Combined conditional noexcept and delete.
void foo() const pure virtual noexcept(…)
Const, conditional noexcept and a pure virtual.
auto bar() -> Foo& constexpr noexcept
Random type and constexpr together.
auto baz() -> decltype(auto) constexpr noexcept
decltype(auto) and constexpr together

Function documentation

Foo::Foo(Foo&&) defaulted noexcept

Combined default and noexcept.

Details.

Foo::Foo(const Foo&) noexcept(…)

Conditional noexcept.

Details.

Foo& Foo::operator=(const Foo&) deleted noexcept(…)

Combined conditional noexcept and delete.

Details.

void Foo::foo() const pure virtual noexcept(…)

Const, conditional noexcept and a pure virtual.

Details.

Foo& Foo::bar() constexpr noexcept

Random type and constexpr together.

This is okay.

decltype(auto) Foo::baz() constexpr noexcept

decltype(auto) and constexpr together

For some reason, due to decltype(auto), Doxygen swaps the order, causing the constexpr to be hard to detect. Don't even ask how it handles trailing return types. It's just HORRIBLE.