Расширение использования декларативов для оператора преобразованияC++

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

Сообщение Anonymous »

Следующий код не компилируется. Каким будет правильный синтаксис и доступен ли он?
Я позволяю структуре перегруженной наследовать преобразованные аргументы шаблона, заключая каждый аргумент в can_convert прежде чем использовать его в качестве базового класса для перегруженных. Теперь я хочу сделать весь оператор T() доступным в перегруженном виде и, следовательно, нуждаюсь в вариативном использовании декларативного кода. В этот момент я не знаю, возможно ли это в C++, и если да, то как должен выглядеть синтаксис.
#include

template
struct can_convert_to
{
using type = T;
operator T();
};

template
struct overloaded : can_convert_to... {
// WHAT WOULD BE THE CORRECT SYNTAX HERE?
using can_convert_to::operator typename can_convert_to::type()...;
};

template
auto any_of() {
overloaded o;
return o;
};

template
concept has_set = requires(T t) {
{ t.set(
any_of()
) } -> std::same_as;
};

struct Foo {};
static_assert(!has_set);

struct Bar {
void set(std::string_view);
void set(std::string);
};
static_assert(has_set);

struct Baz {
void set(std::string);
};
static_assert(has_set);

struct Bazz {
void set(char const *);
};
static_assert(has_set);


Подробнее здесь: https://stackoverflow.com/questions/792 ... n-operator
Ответить

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

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

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

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

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