Код: Выделить всё
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
< /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