Следующий код не компилируется. Каким будет правильный синтаксис и доступен ли он?
Я позволяю структуре перегруженной наследовать преобразованные аргументы шаблона, заключая каждый аргумент в 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