Концепция или черта для проверки инициализации копированияC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Концепция или черта для проверки инициализации копирования

Сообщение Anonymous »

Я хотел бы проверить, как и можно ли создать объект типа A из объекта типа B.

Я также хочу различать прямую инициализацию и инициализацию копирования и поэтому написал следующие концепции:

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

template
concept can_direct_init_from = requires { A{std::declval()}; };
template
concept can_copy_init_from = requires { A a = std::declval(); };
Первый, я думаю, строго эквивалентен std::constructible_from, но я не знаю аналогичной концепции для случая инициализации копирования.

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

std::convertible_to
, похоже, не используется для инициализации копии (согласно соответствующим признакам, это эквивалентно тестированию static_cast от B до A).
Кроме того, моя версия неправильно сформирована:

ошибка: ожидаемое первичное выражение перед 'a'

AFAU, я не могу «объявить» переменную внутри предложения `requires.
Есть ли способ проверить, «можно ли копирование инициализировать из»? Возможно, исправив мою концепцию?

Подробнее здесь: https://stackoverflow.com/questions/794 ... ialization
Ответить

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

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

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

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

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