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

Статическое утверждение для проверки статических элементов данных класса const?
У меня есть несколько классов с элементами данных "static const". Я хотел бы знать, как проверить их значения во время компиляции с помощью static_assert. Могу ли я поместить static_assert непосредственно в тело класса? (Размещать мой static_assert...
792 просмотров
schedule 17.08.2022

Можно ли в VS2010 использовать static_assert для проверки предположения о смещении переменной от начала класса?
Вот упрощенный пример: class A { enum {OFFSET = 4}; //Due to packing bool m_bool; }; template<class T> class B : public A { MyClass<T> m_class; }; Теперь предположим, что класс A может использовать подмножество...
591 просмотров
schedule 12.02.2023

Указание разрешенных аргументов в шаблонах
Могу ли я точно указать, какие аргументы может принимать шаблон? Например, я хотел бы создать шаблон, который может быть создан только с классами, которые являются или расширяют класс A . В Java дженерики поддерживают это с помощью: class...
1207 просмотров
schedule 17.01.2023

Отображать целое число во время компиляции в static_assert()
Вот упрощенная версия того, что я пытаюсь сделать enum First { a, b, c, nbElementFirstEnum, }; enum Second { a, b, c, nbElementSecondEnum, }; static_assert( First::nbElementFirstEnum ==...
11793 просмотров
schedule 22.06.2022

Как внедрить имя типа в виде строки в static_assert()?
Проблема Следующее не создается, потому что сообщение не является строковым литералом. template<typename T> struct Foo { Foo() { static_assert( is_pod<T>::value, typeid(T).name() ); } }; В конечном счете, я бы...
1107 просмотров
schedule 05.05.2022

Возможно ли ASSERT_DOES_NOT_COMPILE с GTest?
Предположим, есть класс шаблона, в котором мы утверждаем во время компиляции, что целочисленный аргумент шаблона должен быть больше нуля: template<int N> class A { public: A() { static_assert(N > 0, "N needs to be greater...
1289 просмотров
schedule 27.09.2023

Утверждение аргумента шаблона является итератором/указателем
У меня есть шаблонная функция, которая принимает указатели. template <typename T> void foo(const T* bar){} Как я могу изменить foo , чтобы убедиться, что мне передается итератор/указатель? Я предполагаю, что есть static_assert или...
381 просмотров

static_assert в неинициализированном классе шаблона с действительной специализацией
Мой вопрос в том, действителен ли следующий код: template<int i> class Class { static_assert(sizeof(i) == 0, "Class instantiated with i != 1"); }; template<> class Class<1> {}; Этот фрагмент компилируется с g++ . Но...
645 просмотров
schedule 21.05.2022

Влияет ли неопределенное поведение на static_assert?
Рассмотрим следующий код: SomeType x=getX(); for(auto mask = 1u<<(CHAR_BIT*sizeof x - 1);/*...*/;/*...*/) { static_assert(sizeof mask>=sizeof x, "Type of numeric parameter is too long"); /*...*/ } Здесь mask будет иметь тип...
194 просмотров
schedule 19.06.2023

Как сделать блок static_assert повторно используемым в классах шаблонов?
Скажем, у меня есть класс шаблона, который создает несколько static_asserts: template <class T> class Foo { static_assert(!std::is_const<T>::value,""); static_assert(!std::is_reference<T>::value,"");...
249 просмотров
schedule 17.03.2024