Вопросы по теме 'static-assert'

Что делает static_assert и для чего бы вы его использовали?
Не могли бы вы привести пример, где static_assert(...) ('C++11') элегантно решил бы проблему? Я знаком со средой выполнения assert(...) . Когда мне следует предпочесть static_assert(...) обычному assert(...) ? Кроме того, в boost есть...
68919 просмотров
schedule 16.05.2023

static_assert не распознает параметр шаблона const char * как constexpr: ошибка g ++?
Рассмотрим определения ниже. char right_string[]="::right_one."; char wrong_string[]="::wrong_one."; template<const char* str> void f(){ static_assert(str==::right_string, "Pass me ::right_string!"); }...
1097 просмотров
schedule 26.04.2022

Статическое утверждение С++ 11 для сопоставимого типа равенства?
Как static_assert тип шаблона является концепцией EqualityComparable в С++ 11?
2817 просмотров
schedule 24.07.2022

Макрос assert, который расширяется до static_assert, когда это возможно?
У меня есть общий код, который должен запускать утверждение над результатом функции-члена. Эта функция-член может быть constexpr , а может и не быть. template<typename T> void foo(T t) { assert(t.member_function() == 10); }...
342 просмотров
schedule 13.03.2024

Лучшее сообщение для `static_assert` о размере объекта
Я довольно часто использовал static_assert (и варианты до стандартизации). Одно из применений, которое, я уверен, многие из нас используют, - это обеспечение того, чтобы размер структур конфиденциальных данных оставался таким, как предполагается...
1201 просмотров
schedule 12.12.2023

static_assert работает неправильно
у меня есть перегруженный operator& для моего класса, где я делаю статическое утверждение, если параметр является указателем. class test { public: template<typename T> friend inline test& operator&(test& so, T...
932 просмотров
schedule 25.05.2023

Получение std::complex‹double› для прохождения теста std::is_floating_point
Я хочу, чтобы типы double , float , complex<double> и complex<float> передавали условие static_assert . Я полагал, что static_assert(std::is_floating<T>::value, "some message") поможет, но сложные типы не проходят этот тест...
696 просмотров
schedule 24.07.2022

Подтвердите целостность аргумента макроса
Я пытаюсь создать макрос, который статически утверждает, что его аргумент является строго положительным целым числом. Это для использования во многих других моих старых макросах, которые до сих пор просто предполагали без какой-либо проверки...
136 просмотров
schedule 20.05.2023

Почему реализация пользовательского статического утверждения не сразу статично утверждает истину?
Существуют различные способы реализации статического утверждения для случаев, когда компилятор C++ не имеет встроенного static_assert . Это один пример из Windows SDK (другой известный — из Boost): #define C_ASSERT(e) typedef char...
171 просмотров

static_assert с частичной специализацией шаблона
template<typename T, typename U = void> struct S { /* static_assert(0, "type unsupported"); */ }; template<typename T> struct S<T, typename std::enable_if<std::is_integral<T>::value, void>::type> { void foo() {} };...
932 просмотров

Boost Fusion: проверка адаптированного порядка членов структуры во время компиляции
Я использую BOOST_FUSION_ADAPT_STRUCT() , и мне нужно проверить, что все элементы объявлены и расположены в правильном порядке. Итак, сначала я сделал это: template <typename Sequence> struct checker { static void check() {...
467 просмотров

Генерировать ошибку времени компиляции, если параметр константы времени компиляции неверен
Я пытаюсь написать функцию, которая при вызове с аргументами, постоянными во время компиляции, вызовет ошибку времени компиляции, если значение аргумента не соответствует static_assert , но все же может быть вызвана во время выполнения с вычисленным...
683 просмотров

Как я могу вызвать ошибку компиляции в функции constexpr вместо того, чтобы позволить ей распасться в контексте, отличном от constexpr?
Вот код, который я хотел бы написать: int id1 = not_const_expr_1(); int id10 = not_const_expr_10(); constexpr Device& cD1 = get_device(1); // 1. ok constexpr Device& cD10 = get_device(10); // 2. compile error Device& cD1 =...
542 просмотров
schedule 19.07.2022

Разрешено ли компиляторам оценивать тавтологии в статическом утверждении
Часто полезно указывать static_assert в шаблонах. В случае, когда шаблон вообще не должен создаваться определенным образом, я часто делаю это template<typename T, typename = void> struct S { static_assert(false, "Unconditional...
216 просмотров
schedule 29.07.2023

если constexpr со static_assert в лямбде, какой компилятор правильный?
Когда мы хотим использовать static_assert в if constexpr , мы должны сделать условие зависимым от некоторого параметра шаблона. Интересно, что gcc и clang расходятся во мнениях, когда код заключен в лямбду. Следующий код компилируется с помощью...
428 просмотров

Как мне статически утверждать, что static_cast не является исключением?
У меня есть функтор для выполнения статических приведений любого типа к определенному типу, определенному таким образом: template <typename T_Out> struct cast_to { template <typename T_In> T_Out operator()(T_In&& value)...
110 просмотров
schedule 09.04.2023

Могу ли я статически утверждать, что сущность является экземпляром класса шаблона, не применяя какие-либо / все аргументы шаблона?
Может быть, вопрос в названии слишком общий, и он общий, потому что мне любопытно Но этот общий вопрос возник из конкретного, менее общего варианта использования. Изначально я написал функцию, работающую с массивом из двух элементов класса A :...
30 просмотров