Вопросы по теме 'static-assert'
Как статически утверждать общее свойство многих классов
Допустим, у меня есть 3 класса. Я ожидаю, что sizeof() каждого класса будет точно таким же, скажем, 512 байт.
Как я могу использовать что-то вроде BOOST_STATIC_ASSERT для применения ко всем из них, чтобы
Мне нужно использовать...
229 просмотров
schedule
04.11.2023
Интегрировать имя типа в вывод static_assert?
Мне нравится сообщать полезные ошибки / сообщения, и я также хочу делать это для моих static_assert s. Проблема в том, что они зависят от параметров шаблона. Обычно эти параметры будут отображаться по пути или по другому из-за возникшей ошибки, но...
15454 просмотров
schedule
13.01.2023
Как проверить, совпадают ли два типа во время компиляции (бонусные баллы, если он работает с Boost strong typedef)
Мне было интересно, можно ли проверить, совпадают ли 2 типа во время компиляции. То, что я придумал, это (не знаю, работает ли это, потому что это кажется хакерским, а стандарт IDK - это хорошо, поэтому IDK, на что обращать внимание при...
14689 просмотров
schedule
26.09.2022
метафункция шаблона для определения специализации шаблона
Вдохновленный этим вопросом , мне интересно, есть ли какая-то проверка во время компиляции, которую можно ввести, чтобы определить, есть ли два заданных шаблона экземпляры:
template <typename T>
class Templ...
typedef...
196 просмотров
schedule
08.05.2022
static_assert, даже если элемент не создан
При вводе жестко заданного значения оно срабатывает, даже если функция, в которой оно находится, не создается. Правильно ли это поведение или я неправильно понимаю, как работает статическое утверждение?
#include <type_traits>
template...
99 просмотров
schedule
17.12.2022
статическое утверждение, что имя типа шаблона T НЕ является полным?
Есть ли способ static_assert, что тип T не завершен в этой точке заголовка? Идея состоит в том, чтобы получить ошибку компиляции, если кто-то добавит #includes в будущем в местах, где их не должно быть.
связанные: Как написать шаблон...
1009 просмотров
schedule
09.07.2022
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 просмотров
schedule
25.11.2022
Пользовательская литеральная строка: проверка длины во время компиляции
У меня есть пользовательский литеральный оператор, который имеет смысл только для строк определенной длины, например:
constexpr uint16_t operator "" _int(const char* s, std::size_t len)
{
return len == 2 ? s[0] | (s[1] << 8) : throw;
}...
941 просмотров
schedule
25.12.2022
Статическое утверждение в специализации шаблона не выполняется, даже если он не создан.
Следующий код компилируется нормально:
#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 просмотров
schedule
02.08.2023
C++: убедитесь, что во время компиляции функция вызывается только в указанном потоке
У меня есть метод, который возится со сложной структурой, которая не является потокобезопасной. Обычно это не проблема, так как практически все вызовы этого метода должны выполняться из фазы инициализации, которая должна выполняться в одном потоке...
687 просмотров
schedule
25.08.2022
Если сбой во время компиляции 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 просмотров
schedule
16.05.2023
static_assert в конструкторе constexpr
Я ищу метод, чтобы определить, что заданное значение конструктора constexpr находится в допустимом диапазоне.
Код выглядит следующим образом:
class Timer0 {
constexpr uint16_t CalcPresecaler( uint32_t faktor )
{
uint16_t prescaler =...
107 просмотров
schedule
08.03.2023