Глубокая проверка концепции C++ [дубликат]C++

Программы на C++. Форум разработчиков
Anonymous
Глубокая проверка концепции C++ [дубликат]

Сообщение Anonymous »

Очевидно, концепции C++ поверхностны.

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

#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
}
Можно ли каким-то образом выполнить оценку добавляемого экземпляра шаблона, чтобы foo больше не отображался добавляемым? Можно ввести ограничение на шаблон add, но я ищу более общий подход:

[*]Компилятор обнаруживает, что единственный match — это шаблон.
[*]Компилятор пытается создать экземпляр шаблона.
Создание экземпляра завершается неудачей где-то в дереве расширения, и концепция оценивается как ложная.


Подробнее здесь: https://stackoverflow.com/questions/786 ... -c-concept

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