Описание тега static-assert
Утверждение, которое проверяется во время компиляции. Функция C++11/C++14, поддерживаемая gcc с 4.3
4
ответа
Требуется: идея шаблона C++ для решения проблемы, но во время компиляции?
У нас есть константный массив структур, примерно такой: static const SettingsSuT _table [] = {{5,1}, {1,2}, {1,1} и т. д.}; структура имеет следующее: size_bytes: число_объекты: Другие члены "метаданных" Таким образом, "общий размер" равен size_byte…
04 фев '09 в 19:27
2
ответа
static_assert, даже если член не создан
При помещении с жестко запрограммированным значением оно срабатывает, даже если функция, в которой он находится, не создается. Это правильное поведение или я неправильно понимаю, как работает static assert? #include <type_traits> template <…
09 май '14 в 07:48
0
ответов
Убедитесь, что пользователь создает экземпляр нового подкласса
Допустим, есть базовый класс class Base { } и пользователь создал новый подкласс class NewDerivedClass : public Base { } Существует также перечисление для всех подклассов: enum SubclassId { Derived1_Id, Derived2_Id, ... NewDerivedClass_Id // User ha…
16 фев '18 в 14:52
4
ответа
static_assert - способ динамически настраивать сообщение об ошибке
Есть ли способ сделать строку static_assert динамически настраиваемой и затем отображаемой?Я имею в виду что-то вроде: //pseudo code static_assert(Check_Range<T>::value, "Value of " + typeof(T) + " type is not so good ;)");
15 окт '11 в 15:26
1
ответ
static_assert'ion, что long и int - это один и тот же тип
Итак, я беру переменную из одного API, мы будем называть ее long foo и передать его другому API, который принимает это значение: int bar, Я нахожусь в visual-studio-2017, где это одно и то же: https://docs.microsoft.com/en-us/cpp/cpp/data-type-range…
02 янв '19 в 20:51
3
ответа
constexpr, static_assert и встраивание
Ранее я спрашивал о перегрузке функций в зависимости от того, являются ли аргументы constexpr, Я пытаюсь обойти неутешительный ответ на этот вопрос, чтобы сделать умную функцию утверждения. Это примерно то, что я пытаюсь сделать: inline void smart_a…
23 апр '12 в 05:35
3
ответа
static_assert перед списком инициализатора конструктора
Существует не шаблонный класс, который имеет шаблонный конструктор. Можно ли проверить статическое утверждение перед инициализацией переменных-членов в таком конструкторе? Например, следующий код выполняется T::value() перед проверкой T есть такой м…
26 ноя '17 в 13:12
2
ответа
C++ - Static_assert и способность функций constexpr оценивать во время выполнения
Я читаю о constexpr а также static_assert функции в C++, и одна вещь, кажется, смущает меня - я читал, что constexpr функции не всегда оцениваются во время компиляции, и иногда они могут оцениваться во время выполнения. Меня беспокоит то, что static…
02 дек '15 в 11:42
3
ответа
Как инициализировать карту массивов разных размеров?
Простой вопрос, как инициализировать карту массивов (или другого типа контейнера) разных размеров? Например: enum class code {A,B,C}; enum class res {X1,X2,X3,X4,X5}; std::map<code, ?> name { {code:A, {res::X1,res::X2}}, {code:B, {res::X2,res:…
01 авг '16 в 15:28
2
ответа
Время компиляции утверждать в Swift?
Можно ли придумать утверждение компиляции в Swift, как static_assert в C++? Может быть, какой-нибудь способ использовать ограничения типов на обобщениях, чтобы вызвать разрыв компилятора?
12 июн '14 в 05:06
1
ответ
static_assert используется в выражении, которое используется в контексте SFINAE
Если я использую static_assert внутри условия для SFINAE компилятор выдает ошибку и останавливается. template < int i> class X { static_assert( i != 4 ); public: static constexpr bool value = true; }; template < typename T > typename std…
29 ноя '18 в 14:14
5
ответов
Пользовательская литеральная строка: проверка длины во время компиляции
У меня есть пользовательский литеральный оператор, который имеет смысл только для строк определенной длины, например: constexpr uint16_t operator "" _int(const char* s, std::size_t len) { return len == 2 ? s[0] | (s[1] << 8) : throw; } Это раб…
29 ноя '17 в 01:22
1
ответ
Может ли состояние поддерживаться через статические утверждения?
Наткнулся на это нужно некоторое время назад и был вынужден обойти это. Мне интересно, есть ли способ перенести состояние через проверку времени компиляции. Так, например, мотивирующим примером будет то, как настроить счетчик, чтобы вы могли сделать…
26 май '15 в 04:06
1
ответ
Проверка макроса Q_OBJECT с помощью static_assert
У меня есть интересная потребность показать ошибку компиляции, если объявление типа, которое мне было дано, не содержит Q_OBJECT макро. Я нашел один плохой способ сделать это. На самом деле это повторяет идею разработчиков Qt сделать то же самое: te…
13 янв '14 в 21:23
1
ответ
Ошибка при использовании static_assert на Netbeans
Я использую Netbeans для разработки приложения Java / JNI / C++. В моих классах C++ я использую static_assert, и Netbeans отображает ошибку: static_assert(myvariable == 2, "My test.") ; Ошибка: Unable to resolve identifier static_assert И да, я вклю…
13 окт '15 в 23:25
2
ответа
Условная компиляция шаблонов
Я пытаюсь получить static_assert, чтобы помочь мне избежать нулевых указателей в C++11. Кажется, проблема в том, что C++ 11 требует, чтобы компилятор компилировал шаблоны, даже если они не созданы. У меня есть следующий код: #include <type_traits…
06 апр '15 в 09:40
2
ответа
Использование static_assert() для обеспечения лучших ошибок времени компиляции (чем компиляторы)
Вчера мне понадобились целые годы, чтобы разобраться с ошибкой во время компиляции, вызванной вызовом const функция-член отconst объект как в этом примере: // my utility header template<typename derived> struct crtp_task : task { std::list<…
19 апр '13 в 09:14
1
ответ
Любые творческие способы проверки, если строка содержит запрещенный символ во время компиляции или, по крайней мере, до ее использования?
Мне нужен способ проверить, что константная строка не содержит определенный символ во время компиляции. Я думал об использовании static_assert, но столкнулся с кирпичной стеной, потому что пытался использовать метод.find, который не является постоян…
19 сен '17 в 18:12
3
ответа
static_assert не скомпилируется, хотя шаблонная функция нигде не вызывается
Я использую g++ 4.6.3 (в настоящее время это пакет по умолчанию для ubuntu 12.04) с флагом C++0x, и я натыкаюсь на это: template <typename T> inline T getValue(AnObject&) { static_assert(false , "this function has to be implemented for des…
31 янв '13 в 23:55
1
ответ
Почему это статическое утверждение не работает?
Я пытаюсь использовать статическое утверждение до C++11. Я нашел этот и этот вопрос, но почему-то не могу его запустить: #define STATIC_ASSERT(x) \ do { \ const static char dummy[(x)?1:-1] = {0};\ } while(0) struct bar { int value; template<typen…
12 окт '16 в 09:47