https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93275
--- Comment #2 from ahmet özhan <tahasuf at gmail dot com> --- template <typename Other, std::enable_if_t< (array_depth_v<array> > array_depth_v<Other>), std::nullptr_t> = nullptr> constexpr array operator * (const Other& other) const { array result {}; std::transform( std::begin(*this), std::end(*this), std::begin(result), [other](const T& t) { return t * other; }); return result; } but change this line and add -fconcepts ------ template <typename Other, std::enable_if_t< (array_depth_v<array> > array_depth_v<Other>), std::nullptr_t> = nullptr> ----- template <typename Other> requires (array_depth_v<array> > array_depth_v<Other>) gcc 9.0 compile.