Код: Выделить всё
#include
template
T add(T a, T b)
{ return a + b;}
template
concept addable = requires(T a, T b)
{
{ add(a, b) } -> std::same_as;
};
struct foo{};
static_assert(addable);
static_assert(addable); // Passes?!
int main()
{
add(foo{}, foo{}); // Will not compile
}
[*]Компилятор обнаруживает, что единственный match — это шаблон.
[*]Компилятор пытается создать экземпляр шаблона.
Создание экземпляра завершается неудачей где-то в дереве расширения, и концепция оценивается как ложная.
Подробнее здесь: https://stackoverflow.com/questions/786 ... -c-concept
Мобильная версия