message: [c++] Improve UnknownFieldOrTypeMismatch
  Simplifies the `DynamicParser<Input>::UnknownFieldOrTypeMismatch` function
  for basic types by excluding some run-time code paths.
diff: @@ -318,9 +318,8 @@ private:
  else if (Head::id >= id && type != bond::BT_STOP && type != bond::BT_STOP_BASE)
  {
  // Unknown field or non-exact type match
  - UnknownFieldOrTypeMismatch(
  + UnknownFieldOrTypeMismatch<is_basic_type<typename Head::field_type>::value>(
  Head::id,
  - is_basic_type<typename Head::field_type>::value,
  Head::metadata,
  id,
  type,
  @@ -392,13 +391,12 @@ private:
  // This function is called only when payload has unknown field id or type is not
  // matching exactly. This relativly rare so we don't inline the function to help
  // the compiler to optimize the common path.
  - template <typename Transform>
  + template <bool IsBasicType, typename Transform>
  BOND_NO_INLINE
  - bool
  - UnknownFieldOrTypeMismatch(uint16_t expected_id, bool is_basic_type, const Metadata& metadata, uint16_t id, BondDataType type, const Transform& transform)
  + typename boost::enable_if_c<IsBasicType, bool>::type
  + UnknownFieldOrTypeMismatch(uint16_t expected_id, const Metadata& metadata, uint16_t id, BondDataType type, const Transform& transform)
  {
  if (id == expected_id &&
  - is_basic_type &&
  type != bond::BT_LIST &&
  type != bond::BT_SET &&
  type != bond::BT_MAP &&
  @@ -412,6 +410,14 @@ private:
  }
  }
  + template <bool IsBasicType, typename Transform>
  + BOND_NO_INLINE
  + typename boost::disable_if_c<IsBasicType, bool>::type
  + UnknownFieldOrTypeMismatch(uint16_t /*expected_id*/, const Metadata& /*metadata*/, uint16_t id, BondDataType type, const Transform& transform)
  + {
  + return UnknownField(id, type, transform);
  + }
  +
  // use runtime schema
  template <typename Transform>
  