Являются ли ограничения в C ++ std :: ranges :: ref_view Constructor, и необходима ли ссылка на пересылку?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Являются ли ограничения в C ++ std :: ranges :: ref_view Constructor, и необходима ли ссылка на пересылку?

Сообщение Anonymous »

Реализация libstdc ++ std :: ranges :: ref_view , следуя стандарту C ++, включает в себя следующий код:

Код: Выделить всё

  template requires is_object_v
class ref_view : public view_interface
{
private:
_Range* _M_r;

static void _S_fun(_Range&); // not defined
static void _S_fun(_Range&&) = delete;

public:
template
requires convertible_to
&& requires { _S_fun(declval()); }
constexpr
ref_view(_Tp&& __t)
noexcept(noexcept(static_cast(std::declval())))
: _M_r(std::__addressof(static_cast(std::forward(__t))))
{ }
};
< /code>
На конструкторе есть три ограничения: < /p>

[*]__detail::__different_from
[*]

Код: Выделить всё

convertible_to
requires { _S_fun(declval()); }< /code> < /li>
< /ol>
Мои вопросы: < /p>

ограничение 2 более строго, чем ограничение 1, и ограничено 3 более строгое, чем ограничение 2? Другими словами, можем ли мы сохранить только ограничение 3 и удалить два других без изменения поведения? Достаточно ли следующего более простого неэлементного конструктора? < /Li>
< /ol>
template requires is_object_v
class ref_view : public view_interface
{
private:
_Range* _M_r;

public:
constexpr
ref_view(_Range& __t)
noexcept
: _M_r(std::__addressof(__t))
{ }
};
< /code>
Я попробовал три модели ИИ (Gemini, Grok и Claude), и их ответы содержат различные ошибки. Например, они неправильно думают, что использование неэлементного конструктора ограничит конструктор точными совпадениями, предотвращая полиморфное использование.

Подробнее здесь: https://stackoverflow.com/questions/797 ... d-is-the-f
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»