Функция языка, известная (по крайней мере, Microsoft) как краткий статический ассертер, то есть static_assert()
только с одним аргументом, была введена в стандарте C++17. До этого второй аргумент (строковый литерал, сообщение об ошибке) является обязательным. Итак, компиляция вашего кода с (например) MSVC и флагом /std:C++14 дает эту ошибку:
ошибка C2429: языковая функция «краткое статическое утверждение» требует флага компилятора «/std: c++ 17»
И clang-cl дает:
предупреждение: static_assert без сообщения является расширением C++17 [-Wc++17-extensions]
Чтобы исправить это, либо переключите свой компилятор на соответствие стандарту C++17, либо, если у вас нет такой возможности, добавьте требуемый второй аргумент:
static_assert(sizeof(uintptr_t) == sizeof(void*), "Wrong uintptr_t size!");
Но заметьте, даже при этом нет никакой гарантии, что утверждение будет успешным! Тип uintptr_t
требуется только для того, чтобы иметь достаточный размер для корректного размещения указателя; он не должен быть точно такого же размера. См.: Что такое тип данных uintptr_t.
person
Adrian Mole
schedule
29.11.2020
static_assert
требуется второй параметр - сообщение об ошибке - до C++17. Судя по всему, в вашем компиляторе не включен C++17. Либо придумай как его включить, либо добавь сообщение об ошибке, как вstatic_assert(condition, "Error message here")
- person Igor Tandetnik   schedule 29.11.2020c++17
находится в настройках проекта. Свойства -> C/C++ -> Язык -> Языковой стандарт C++ - person drescherjm   schedule 29.11.2020