Как определить «концепцию», которая использует «концепцию» в C++ 20? ⇐ C++
Как определить «концепцию», которая использует «концепцию» в C++ 20?
Я изучаю концепции в C++ 20 и пришел к необходимости определить концепцию, используя ранее определенную концепцию.
р>
Итак, в приведенном ниже примере я ожидал, что f() сгенерирует ошибку компилятора, поскольку events_published в pub_b этого не делает. удовлетворять концепции publisher, поскольку ev_2 не соответствует концепции event.
Похоже, что использование концепции event в концепции publisher не имеет никакого эффекта.
Отчеты о версии G++
g++ (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0 Авторские права (C) 2021 Free Software Foundation, Inc. Это бесплатное программное обеспечение; условия копирования см. в источнике. Здесь нет гарантия; даже не для ТОВАРНОЙ ПРИГОДНОСТИ или ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННОЙ ЦЕЛИ. Что я делаю не так?
#include #include шаблон концептуальное событие = требует { std::default_initializable; std::copy_constructible; std::move_constructible; }; структура ev_1 { ev_1() = по умолчанию; ev_1(const ev_1 &) = по умолчанию; ev_1(ev_1 &&) = по умолчанию; }; структура ev_2 { ev_2() = удалить; ev_2(const ev_2 &) = по умолчанию; ev_2(ev_2 &&) = по умолчанию; }; шаблон издатель концепции = требуется { имя типа t::events_published; require[](std::index_sequence) { return ((event>)&&...); } (std::make_index_sequence()); }; структура pub_a { использование event_published = std::tuple; }; структура pub_b { использование event_published = std::tuple; }; шаблон void f() {} интервал основной() { е(); е(); вернуть 0; }
Я изучаю концепции в C++ 20 и пришел к необходимости определить концепцию, используя ранее определенную концепцию.
р>
Итак, в приведенном ниже примере я ожидал, что f() сгенерирует ошибку компилятора, поскольку events_published в pub_b этого не делает. удовлетворять концепции publisher, поскольку ev_2 не соответствует концепции event.
Похоже, что использование концепции event в концепции publisher не имеет никакого эффекта.
Отчеты о версии G++
g++ (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0 Авторские права (C) 2021 Free Software Foundation, Inc. Это бесплатное программное обеспечение; условия копирования см. в источнике. Здесь нет гарантия; даже не для ТОВАРНОЙ ПРИГОДНОСТИ или ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННОЙ ЦЕЛИ. Что я делаю не так?
#include #include шаблон концептуальное событие = требует { std::default_initializable; std::copy_constructible; std::move_constructible; }; структура ev_1 { ev_1() = по умолчанию; ev_1(const ev_1 &) = по умолчанию; ev_1(ev_1 &&) = по умолчанию; }; структура ev_2 { ev_2() = удалить; ev_2(const ev_2 &) = по умолчанию; ev_2(ev_2 &&) = по умолчанию; }; шаблон издатель концепции = требуется { имя типа t::events_published; require[](std::index_sequence) { return ((event>)&&...); } (std::make_index_sequence()); }; структура pub_a { использование event_published = std::tuple; }; структура pub_b { использование event_published = std::tuple; }; шаблон void f() {} интервал основной() { е(); е(); вернуть 0; }
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение