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

Как статически утверждать общее свойство многих классов
Допустим, у меня есть 3 класса. Я ожидаю, что sizeof() каждого класса будет точно таким же, скажем, 512 байт. Как я могу использовать что-то вроде BOOST_STATIC_ASSERT для применения ко всем из них, чтобы Мне нужно использовать...
229 просмотров
schedule 04.11.2023

Интегрировать имя типа в вывод static_assert?
Мне нравится сообщать полезные ошибки / сообщения, и я также хочу делать это для моих static_assert s. Проблема в том, что они зависят от параметров шаблона. Обычно эти параметры будут отображаться по пути или по другому из-за возникшей ошибки, но...
15454 просмотров

Как проверить, совпадают ли два типа во время компиляции (бонусные баллы, если он работает с Boost strong typedef)
Мне было интересно, можно ли проверить, совпадают ли 2 типа во время компиляции. То, что я придумал, это (не знаю, работает ли это, потому что это кажется хакерским, а стандарт IDK - это хорошо, поэтому IDK, на что обращать внимание при...
14689 просмотров

метафункция шаблона для определения специализации шаблона
Вдохновленный этим вопросом , мне интересно, есть ли какая-то проверка во время компиляции, которую можно ввести, чтобы определить, есть ли два заданных шаблона экземпляры: template <typename T> class Templ... typedef...
196 просмотров

static_assert, даже если элемент не создан
При вводе жестко заданного значения оно срабатывает, даже если функция, в которой оно находится, не создается. Правильно ли это поведение или я неправильно понимаю, как работает статическое утверждение? #include <type_traits> template...
99 просмотров
schedule 17.12.2022

статическое утверждение, что имя типа шаблона T НЕ является полным?
Есть ли способ static_assert, что тип T не завершен в этой точке заголовка? Идея состоит в том, чтобы получить ошибку компиляции, если кто-то добавит #includes в будущем в местах, где их не должно быть. связанные: Как написать шаблон...
1009 просмотров

constexpr std::array со static_assert
#include <iostream> #include <array> int main(int argc, char **argv) { constexpr const std::array<int, 2> arr {{ 0, 1 }}; constexpr const int arr2[] = { 0, 1}; static_assert(arr[0] == arr2[0], "asdf");...
1529 просмотров
schedule 23.06.2023

static_assert отрицательное целое число
#include <iostream> using namespace std; template <int fact> constexpr int pow2T() { static_assert(fact < 0, "error"); return fact == 0 ? 1 : pow2T<fact - 1>() * 2; } constexpr int e2 = pow2T<2>(); int main(int...
450 просмотров
schedule 15.07.2023

Как установить предварительное условие для оценки static_assert?
У меня есть эта функция для нулевой перезаписи вещей, которая использует static_assert, чтобы проверить, является ли тип данной вещи типом POD: template <bool safeMode = true, typename generic> void overwriteWithZeros( generic...
154 просмотров
schedule 06.08.2022

Определите во время компиляции, если это только для чтения
Можно ли определить, является ли указатель this константным указателем во время компиляции? Я хотел бы добиться чего-то вроде этого: class Foo { Foo() { static_assert( is this read only?, "works only on read only objects");...
169 просмотров
schedule 14.06.2023

Является ли std::is_same‹t,t›::value всегда истинным?
Я унаследовал код, который выглядит так: /// /// A specializable function for converting a user-defined object to a string value /// template <typename value_type> std::string to_string(const value_type &value) {...
974 просмотров

Пользовательская литеральная строка: проверка длины во время компиляции
У меня есть пользовательский литеральный оператор, который имеет смысл только для строк определенной длины, например: constexpr uint16_t operator "" _int(const char* s, std::size_t len) { return len == 2 ? s[0] | (s[1] << 8) : throw; }...
941 просмотров

Статическое утверждение в специализации шаблона не выполняется, даже если он не создан.
Следующий код компилируется нормально: #include <type_traits> template <typename T> struct dependent_true : std::true_type { }; template <typename T> struct dependent_false : std::false_type { }; template <bool B =...
599 просмотров

C++: убедитесь, что во время компиляции функция вызывается только в указанном потоке
У меня есть метод, который возится со сложной структурой, которая не является потокобезопасной. Обычно это не проблема, так как практически все вызовы этого метода должны выполняться из фазы инициализации, которая должна выполняться в одном потоке...
687 просмотров

Если сбой во время компиляции constexpr для неправильной ветки
У меня есть функция сериализации, которая делает что-то вроде: class Serializer { template<typename T> T read(const std::string& source) { if constexpr(std::is_same<T, int>::value) { return...
423 просмотров
schedule 28.03.2023

Как статически утверждать, если определена константа перечисления?
У меня есть этот код С++ 14: #include <type_traits> struct f1 { enum struct e { a }; }; struct f2 { enum struct e {}; }; template <typename T> struct my_struct { using e = typename T::e; my_struct() : _e{e::a} {}...
105 просмотров
schedule 25.06.2023

В чем преимущество std::enable_if перед static_assert для шаблонов классов?
Меня интересовало преимущество std::enable_if над static_asserts , чтобы предотвратить создание экземпляра шаблона. Этот ответ предполагает, что std::enable_if позволяет SFINAE , что является убедительным аргументом в случае шаблоны...
175 просмотров

static_assert в конструкторе constexpr
Я ищу метод, чтобы определить, что заданное значение конструктора constexpr находится в допустимом диапазоне. Код выглядит следующим образом: class Timer0 { constexpr uint16_t CalcPresecaler( uint32_t faktor ) { uint16_t prescaler =...
107 просмотров
schedule 08.03.2023