Вопросы по теме '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 просмотров
schedule
23.03.2023
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