Глубокая проверка концепции 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
Ответить

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

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

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

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

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