Как работает механизм перегрузки аргументов функции-члена в выражении require?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как работает механизм перегрузки аргументов функции-члена в выражении require?

Сообщение Anonymous »

Это дополнительный вопрос к теме «Как применить концепцию к функции-члену в концепции и затем использовать ее?». Я сосредоточен не на том, как исправить этот код, а на понимании основного механизма.
Предположим следующий код (собранный на основе материалов @Wutz, @Jarod42 и @wohlstad):
p>

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

#include 
#include 

template
concept has_set = requires(T t) {
{ t.set(
[](){ struct {
operator std::string_view();
operator std::string();
operator char *();
} s; return s; }()
) } -> std::same_as;
};

struct Foo {};
static_assert(!has_set);

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

struct Baz {
void set(int i);
void set(std::string) const noexcept;
};
static_assert(has_set);

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

struct Bazzz {
void set(char *);
void set(std::string);
};

// Why do we have a build failure here?
// static_assert(has_set);
  • Пожалуйста, объясните, как и почему оператор преобразования типа, используемого в качестве аргумента для t.set в выражении require, имеет вид оценивается во время реализации концепции.
  • Пожалуйста, объясните, почему набор перегрузок Bazzz приводит к сбою сборки концепции


Подробнее здесь: https://stackoverflow.com/questions/791 ... s-in-a-req
Ответить

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

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

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

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

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