Binary operators like:
template <typename B, typename I, unsigned int F, bool R>
constexpr inline fixed<B, I, F, R> operator+(const fixed<B, I, F, R>& x, const fixed<B, I, F, R>& y) noexcept
{
return fixed<B, I, F, R>(x) += y;
}
are defined as constexpr but the += operator is never constexpr which results in a "cannot result in a constant expression" error.