Концепция или черта для проверки инициализации копирования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

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