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; ```