void NetworkChangeNotification::deserialize(const Bytes& bytes, const Bytes::size_type length) { Bytes::size_type idx{0}; if (bytes.empty() || bytes.size() < length || get_type() != static_cast<Notification::Type>(bytes[idx++])) { throw std::runtime_error("Notification deserialization failed."); } check_idx(idx, length); idx += decode_int<decltype(m_iface_index)>(m_iface_index, bytes.data() + idx, length - idx); check_idx(idx, length); m_change_type = static_cast<net::NetworkChangeNotifier::ChangeType>(bytes[idx++]); }
int main() { { typedef double T; typedef std::array<T, 3> C; C c = {1, 2, 3.5}; C::reference r1 = c[0]; assert(r1 == 1); r1 = 5.5; assert(c.front() == 5.5); C::reference r2 = c[2]; assert(r2 == 3.5); r2 = 7.5; assert(c.back() == 7.5); } { typedef double T; typedef std::array<T, 3> C; const C c = {1, 2, 3.5}; C::const_reference r1 = c[0]; assert(r1 == 1); C::const_reference r2 = c[2]; assert(r2 == 3.5); } #if TEST_STD_VER > 11 { typedef double T; typedef std::array<T, 3> C; constexpr C c = {1, 2, 3.5}; constexpr T t1 = c[0]; static_assert (t1 == 1, ""); constexpr T t2 = c[2]; static_assert (t2 == 3.5, ""); } #endif #if TEST_STD_VER > 14 { static_assert (check_idx(0, 1), ""); static_assert (check_idx(1, 2), ""); static_assert (check_idx(2, 3.5), ""); } #endif }
int idaapi type_builder_t::visit_expr(cexpr_t *e) { // check if the expression being visited is variable if(e->op == cot_var) { // get the variable name char expr_name[MAXSTR]; e->print1(expr_name, MAXSTR, NULL); tag_remove(expr_name, expr_name, 0); // check for the target variable if(!strcmp(expr_name, highl_expr_name)) { struct_filed str_fld; if(check_memptr(str_fld)) structure.push_back(str_fld); else if(check_idx(str_fld)) structure.push_back(str_fld); else if(check_ptr(str_fld)) structure.push_back(str_fld); } } return 0; }
jd_var *jd_array_get(jd_array *jda, int idx) { return ELT(jda, check_idx(jda, idx)); }
int main(int, char**) { { typedef double T; typedef std::array<T, 3> C; C c = {1, 2, 3.5}; C::reference r1 = c[0]; assert(r1 == 1); r1 = 5.5; assert(c.front() == 5.5); C::reference r2 = c[2]; assert(r2 == 3.5); r2 = 7.5; assert(c.back() == 7.5); } { typedef double T; typedef std::array<T, 3> C; const C c = {1, 2, 3.5}; C::const_reference r1 = c[0]; assert(r1 == 1); C::const_reference r2 = c[2]; assert(r2 == 3.5); } { // Test operator[] "works" on zero sized arrays typedef double T; typedef std::array<T, 0> C; C c = {}; C const& cc = c; static_assert((std::is_same<decltype(c[0]), T &>::value), ""); static_assert((std::is_same<decltype(cc[0]), const T &>::value), ""); if (c.size() > (0)) { // always false C::reference r1 = c[0]; C::const_reference r2 = cc[0]; ((void)r1); ((void)r2); } } { // Test operator[] "works" on zero sized arrays typedef double T; typedef std::array<const T, 0> C; C c = {{}}; C const& cc = c; static_assert((std::is_same<decltype(c[0]), const T &>::value), ""); static_assert((std::is_same<decltype(cc[0]), const T &>::value), ""); if (c.size() > (0)) { // always false C::reference r1 = c[0]; C::const_reference r2 = cc[0]; ((void)r1); ((void)r2); } } #if TEST_STD_VER > 11 { typedef double T; typedef std::array<T, 3> C; constexpr C c = {1, 2, 3.5}; constexpr T t1 = c[0]; static_assert (t1 == 1, ""); constexpr T t2 = c[2]; static_assert (t2 == 3.5, ""); } #endif #if TEST_STD_VER > 14 { static_assert (check_idx(0, 1), ""); static_assert (check_idx(1, 2), ""); static_assert (check_idx(2, 3.5), ""); } #endif return 0; }