Skip to content

All uses auto&& in function signatures potentially undefined behavior #175

Closed
@kelbon

Description

@kelbon

constexpr auto operator_as( std::variant<Ts...> const& x ) -> auto&& {

Its not equal to decltype(auto).
If returns by value, then auto&& generates dangling rvalue reference, while decltype(auto) returns by value as needed

https://godbolt.org/z/7Gfr5fb1d

template< typename C, typename X >
    requires std::is_same_v<C, X>
auto as( X const& x ) -> auto&& {
    return 5;
}

int main() {
    static_assert(std::is_same_v<decltype(as<int>(5)), int&&>);
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions