Я играю с понятиями. Вот минимальный пример, где я пытаюсь создать концепцию на основе сигнатур методов:Понятия: проверка подписи методов с аргументами
template<typename T>
concept bool myConcept() {
return requires(T a, int i) {
{ a.foo() } -> int;
{ a.bar(i) } -> int;
};
}
struct Object {
int foo() {return 0;}
int bar(int) {return 0;}
};
static_assert(myConcept<Object>(), "Object does not adhere to myConcept");
К моему удивлению написания { a.bar(int) } -> int
не работал, так что я прибегал к добавлению дополнительного аргумента к выражению requires
. Это кажется немного странным, и мне было интересно, есть ли способ сделать то же самое. Еще одна вещь, которая работала, заключалась в использовании чего-то вроде { a.bar((int)0) } -> int
, но я считаю это хуже.
Мне нравится, что вы makeval(), и я хотел бы увидеть его в стандарте. –
YSC