Skip to content

The converting optional<U> constructor only works with optional<const T&> #60

@steve-downey

Description

@steve-downey
    base b{1};
    derived d(1, 2);

    tl::optional<base&> b3{d2}; // error
    tl::optional<const base&> b3a{d2}; // works

The optional is deep const, so when rhs is called with an optionalconst& the type is U const&, and the delegated constructor can't convert the addressof(u) to a T

Illustration here: https://godbolt.org/z/sTEr1cfd6

Comparison with boost::optional : https://godbolt.org/z/T1EYcjv71

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