Следующий код вообще не компилируется из -за (вероятно) рекурсии бесконечности. /> std :: remove_reference :: type & __t, const typename
std :: remove_reference :: type & __u) {{__t decktype (auto)
[tress std :: __ detail: __bolean_testable ; /> __ u} -> decktype (auto) [Tress std :: __ detail :: __ boolean_testable ]; {__ t
decltype (auto) [требуется
std :: __ detail :: __ boolean_testable ]; /> decktype (auto) [tress
std :: __ detail :: __ boolean_testable ]; {__ u
decltype (auto) [tress
std :: __ detail :: __ boolean_testable ]; [Требуется
std :: __ detail :: __ boolean_testable ]; {__ u
decltype (auto) [Tress
std :: __ detail :: __ boolean_testable ]; {__ u> = __t} ->
dectypable ]; {__ u> = __t} /> std :: __ detail :: __ boolean_testable ];} [с _tp =
permutated_iterator 'Заповедите. /> < /blockquote>
Я действительно не понимаю, почему. < /p>
#include
#include
#include
using namespace std;
template
requires (unsigned_integral
&& !is_same_v)
struct permutated_iterator
{
private:
T1 p{}; ///< Permutation vector iterator.
T2 v{}; ///< Permutated vector iterator.
public:
/// Default constructor is needed from std::forward_iterator concept.
constexpr permutated_iterator() = default;
/** Constructor for dense permutated vector iterator.
\param p Permutation vector iterator, pointing in current position of this iterator.
\param v The permutated vector iterator, pointing in start of vector. */
constexpr permutated_iterator(T1 p, T2 v) noexcept : p{p}, v{v} {}
constexpr bool operator==(const permutated_iterator &it) const noexcept { return p == it.p; }
constexpr auto operator(const permutated_iterator &it) const noexcept { return p it.p; }
};
int main()
{
using piter = std::span::iterator;
using viter = std::span::iterator ;
using cpiter = std::basic_const_iterator ;
using iter1 = permutated_iterator ;
using iter2 = permutated_iterator;
static_assert(std::totally_ordered);
static_assert(std::totally_ordered);
static_assert(std::totally_ordered);
static_assert(std::totally_ordered);
static_assert(std::totally_ordered); // PROBLEM!!!!
// this is ok: iter2() == iter2()
// this is not ok: iter2() > iter2()
}
< /code>
обновление < /strong>
Это ошибка G ++. Исправлено в G ++ 15.1.
Подробнее здесь: https://stackoverflow.com/questions/782 ... inside-ano