qxLib
Classes | Macros
static_assert.h File Reference

Static assert macros. More...

#include <qx/macros/common.h>
#include <qx/macros/names.h>
#include <qx/math/between.h>
#include <functional>

Go to the source code of this file.

Classes

struct  qx::details::static_assert_two< left, right, compare_t >
 
struct  qx::details::static_assert_two< left, right, std::equal_to<> >
 
struct  qx::details::static_assert_two< left, right, std::not_equal_to<> >
 
struct  qx::details::static_assert_two< left, right, std::less<> >
 
struct  qx::details::static_assert_two< left, right, std::less_equal<> >
 
struct  qx::details::static_assert_two< left, right, std::greater<> >
 
struct  qx::details::static_assert_two< left, right, std::greater_equal<> >
 
struct  qx::details::static_assert_between< left, value, right >
 

Macros

#define QX_STATIC_ASSERT_BETWEEN(left, value, right)    qx::details::static_assert_between<(left), (value), (right)> QX_LINE_NAME(static_assert_between_)
 Shows left, value and right in error msg. More...
 
#define QX_STATIC_ASSERT_NO_INSTANTIATION(Message)
 This static assert will fail if block it placed in must not be instantiated. More...
 

Detailed Description

Static assert macros.

Author
Khrapov
Date
7.08.2022

Definition in file static_assert.h.

Macro Definition Documentation

◆ QX_STATIC_ASSERT_BETWEEN

#define QX_STATIC_ASSERT_BETWEEN (   left,
  value,
  right 
)     qx::details::static_assert_between<(left), (value), (right)> QX_LINE_NAME(static_assert_between_)

Shows left, value and right in error msg.

Parameters
left- left value
value- value to check
right- right value

Definition at line 99 of file static_assert.h.

◆ QX_STATIC_ASSERT_NO_INSTANTIATION

#define QX_STATIC_ASSERT_NO_INSTANTIATION (   Message)
Value:
[]<bool flag = false>() \
{ \
static_assert(flag, Message); \
}()

This static assert will fail if block it placed in must not be instantiated.

template<class T>
constexpr int GetValue()
{
if constexpr (std::is_same_v<T, bool>)
{
return 0;
}
else if constexpr (std::is_same_v<T, int>)
{
return 0;
}
else
{
QX_STATIC_ASSERT_NO_INSTANTIATION("T must be bool or int");
return 0;
}
}
constexpr int val1 = GetValue<bool>(); // ok
constexpr int val2 = GetValue<int>(); // ok
constexpr int val3 = GetValue<long>(); // static_assert failure
#define QX_STATIC_ASSERT_NO_INSTANTIATION(Message)
This static assert will fail if block it placed in must not be instantiated.
Parameters
Message- static_assert message

Definition at line 131 of file static_assert.h.