https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117889
--- Comment #3 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
Semi reduced:
```
#include <optional>
struct LayoutUnit {
constexpr LayoutUnit();
template <typename IntegerType>
constexpr explicit LayoutUnit(IntegerType value);
constexpr explicit LayoutUnit(unsigned long value);
constexpr explicit LayoutUnit(float value);
constexpr explicit LayoutUnit(double value);
operator int() const = delete;
operator unsigned() const = delete;
constexpr operator double() const;
constexpr operator float() const;
constexpr operator bool() const;
};
std::optional<LayoutUnit> a;
std::optional<LayoutUnit> b = a;
```