@@ -310,10 +310,11 @@ extern "C" void c_phone_number_util_normalize_dialable_chars_only(
310310}
311311
312312extern "C" void c_phone_number_util_get_national_significant_number(
313− PhoneNumber const *number,
313+ CxxPhoneNumber const *ptr,
314314 c_string *c_nsn
315315)
316316{
317+ auto number = reinterpret_cast<PhoneNumber const *>(ptr);
317318 std::string nsn;
318319 PhoneNumberUtil::GetInstance()->GetNationalSignificantNumber(*number, &nsn);
319320 unmarshal_c_string(nsn, *c_nsn);
@@ -330,23 +331,25 @@ extern "C" void c_phone_number_util_get_country_mobile_token(
330331}
331332
332333extern "C" void c_phone_number_util_format(
333− PhoneNumber const *number,
334+ CxxPhoneNumber const *ptr,
334335 phone_number_format format,
335336 c_string *c_string
336337)
337338{
339+ auto number = reinterpret_cast<PhoneNumber const *>(ptr);
338340 std::string string;
339341 PhoneNumberUtil::GetInstance()->Format(*number, marshal_phone_number_format(format), &string);
340342 unmarshal_c_string(string, *c_string);
341343}
342344
343345extern "C" void c_phone_number_util_format_national_number_with_carrier_code(
344− PhoneNumber const *number,
346+ CxxPhoneNumber const *ptr,
345347 char const *c_carrier_code,
346348 size_t c_carrier_code_size,
347349 c_string *c_string
348350)
349351{
352+ auto number = reinterpret_cast<PhoneNumber const *>(ptr);
350353 std::string const carrier_code(c_carrier_code, c_carrier_code_size);
351354 std::string string;
352355 PhoneNumberUtil::GetInstance()->FormatNationalNumberWithCarrierCode(*number, carrier_code, &string);
@@ -354,12 +357,13 @@ extern "C" void c_phone_number_util_format_national_number_with_carrier_code(
354357}
355358
356359extern "C" void c_phone_number_util_format_national_number_with_preferred_carrier_code(
357− PhoneNumber const *number,
360+ CxxPhoneNumber const *ptr,
358361 char const *c_carrier_code,
359362 size_t c_carrier_code_size,
360363 c_string *c_string
361364)
362365{
366+ auto number = reinterpret_cast<PhoneNumber const *>(ptr);
363367 std::string const carrier_code(c_carrier_code, c_carrier_code_size);
364368 std::string string;
365369 PhoneNumberUtil::GetInstance()->FormatNationalNumberWithPreferredCarrierCode(*number, carrier_code, &string);
@@ -367,13 +371,14 @@ extern "C" void c_phone_number_util_format_national_number_with_preferred_carrie
367371}
368372
369373extern "C" void c_phone_number_util_format_number_for_mobile_dialing(
370− PhoneNumber const *number,
374+ CxxPhoneNumber const *ptr,
371375 char const *c_region,
372376 size_t c_region_size,
373377 int with_formatting,
374378 c_string *c_string
375379)
376380{
381+ auto number = reinterpret_cast<PhoneNumber const *>(ptr);
377382 std::string const region(c_region, c_region_size);
378383 std::string string;
379384 PhoneNumberUtil::GetInstance()->FormatNumberForMobileDialing(*number, region, with_formatting, &string);
@@ -381,12 +386,13 @@ extern "C" void c_phone_number_util_format_number_for_mobile_dialing(
381386}
382387
383388extern "C" void c_phone_number_util_format_out_of_country_calling_number(
384− PhoneNumber const *number,
389+ CxxPhoneNumber const *ptr,
385390 char const *c_region,
386391 size_t c_region_size,
387392 c_string *c_string
388393)
389394{
395+ auto number = reinterpret_cast<PhoneNumber const *>(ptr);
390396 std::string const region(c_region, c_region_size);
391397 std::string string;
392398 PhoneNumberUtil::GetInstance()->FormatOutOfCountryCallingNumber(*number, region, &string);
@@ -394,12 +400,13 @@ extern "C" void c_phone_number_util_format_out_of_country_calling_number(
394400}
395401
396402extern "C" void c_phone_number_util_format_in_original_format(
397− PhoneNumber const *number,
403+ CxxPhoneNumber const *ptr,
398404 char const *c_region,
399405 size_t c_region_size,
400406 c_string *c_string
401407)
402408{
409+ auto number = reinterpret_cast<PhoneNumber const *>(ptr);
403410 std::string const region(c_region, c_region_size);
404411 std::string string;
405412 PhoneNumberUtil::GetInstance()->FormatInOriginalFormat(*number, region, &string);
@@ -407,24 +414,26 @@ extern "C" void c_phone_number_util_format_in_original_format(
407414}
408415
409416extern "C" void c_phone_number_util_format_out_of_country_keeping_alpha_chars(
410− PhoneNumber const *number,
417+ CxxPhoneNumber const *ptr,
411418 char const *c_region,
412419 size_t c_region_size,
413420 c_string *c_string
414421)
415422{
423+ auto number = reinterpret_cast<PhoneNumber const *>(ptr);
416424 std::string const region(c_region, c_region_size);
417425 std::string string;
418426 PhoneNumberUtil::GetInstance()->FormatOutOfCountryKeepingAlphaChars(*number, region, &string);
419427 unmarshal_c_string(string, *c_string);
420428}
421429
422−extern "C" PhoneNumber *c_phone_number_util_truncate_too_long_number(PhoneNumber const *input)
430+extern "C" CxxPhoneNumber *c_phone_number_util_truncate_too_long_number(CxxPhoneNumber const *ptr)
423431{
432+ auto input = reinterpret_cast<PhoneNumber const *>(ptr);
424433 auto *output = new PhoneNumber(*input);
425434 if (PhoneNumberUtil::GetInstance()->TruncateTooLongNumber(output))
426435 {
427− return output;
436+ return reinterpret_cast<CxxPhoneNumber *>(output);
428437 }
429438 else
430439 {
@@ -433,33 +442,37 @@ extern "C" PhoneNumber *c_phone_number_util_truncate_too_long_number(PhoneNumber
433442 }
434443}
435444
436−extern "C" phone_number_type c_phone_number_util_get_number_type(PhoneNumber const *number)
445+extern "C" phone_number_type c_phone_number_util_get_number_type(CxxPhoneNumber const *ptr)
437446{
447+ auto number = reinterpret_cast<PhoneNumber const *>(ptr);
438448 return unmarshal_phone_number_type(
439449 PhoneNumberUtil::GetInstance()->GetNumberType(*number)
440450 );
441451}
442452
443−extern "C" int c_phone_number_util_is_valid_number(PhoneNumber const *number)
453+extern "C" int c_phone_number_util_is_valid_number(CxxPhoneNumber const *ptr)
444454{
455+ auto number = reinterpret_cast<PhoneNumber const *>(ptr);
445456 return PhoneNumberUtil::GetInstance()->IsValidNumber(*number);
446457}
447458
448459extern "C" int c_phone_number_util_is_valid_number_for_region(
449− PhoneNumber const *number,
460+ CxxPhoneNumber const *ptr,
450461 char const *c_region,
451462 size_t c_region_size
452463)
453464{
465+ auto number = reinterpret_cast<PhoneNumber const *>(ptr);
454466 std::string const region(c_region, c_region_size);
455467 return PhoneNumberUtil::GetInstance()->IsValidNumberForRegion(*number, region);
456468}
457469
458470extern "C" void c_phone_number_util_get_region_code_for_number(
459− PhoneNumber const *number,
471+ CxxPhoneNumber const *ptr,
460472 c_string *c_region
461473)
462474{
475+ auto number = reinterpret_cast<PhoneNumber const *>(ptr);
463476 std::string region;
464477 PhoneNumberUtil::GetInstance()->GetRegionCodeForNumber(*number, ®ion);
465478 unmarshal_c_string(region, *c_region);
@@ -518,10 +531,11 @@ extern "C" void c_phone_number_util_get_ndd_prefix_for_region(
518531}
519532
520533extern "C" validation_result c_phone_number_util_is_possible_number_for_type_with_reason(
521− PhoneNumber const *number,
534+ CxxPhoneNumber const *ptr,
522535 phone_number_type ntype
523536)
524537{
538+ auto number = reinterpret_cast<PhoneNumber const *>(ptr);
525539 return unmarshal_validation_result(
526540 PhoneNumberUtil::GetInstance()->IsPossibleNumberForTypeWithReason(
527541 *number,
@@ -530,13 +544,15 @@ extern "C" validation_result c_phone_number_util_is_possible_number_for_type_wit
530544 );
531545}
532546
533−extern "C" int c_phone_number_util_can_be_internationally_dialed(PhoneNumber const *number)
547+extern "C" int c_phone_number_util_can_be_internationally_dialed(CxxPhoneNumber const *ptr)
534548{
549+ auto number = reinterpret_cast<PhoneNumber const *>(ptr);
535550 return PhoneNumberUtil::GetInstance()->CanBeInternationallyDialled(*number);
536551}
537552
538−extern "C" int c_phone_number_util_is_number_geographical_1(PhoneNumber const *number)
553+extern "C" int c_phone_number_util_is_number_geographical_1(CxxPhoneNumber const *ptr)
539554{
555+ auto number = reinterpret_cast<PhoneNumber const *>(ptr);
540556 return PhoneNumberUtil::GetInstance()->IsNumberGeographical(*number);
541557}
542558
@@ -556,14 +572,14 @@ extern "C" error_type c_phone_number_util_parse(
556572 size_t c_string_size,
557573 char const *c_region,
558574 size_t c_region_size,
559− PhoneNumber **number
575+ CxxPhoneNumber **number
560576)
561577{
562578 std::string const string(c_string, c_string_size);
563579 std::string const region(c_region, c_region_size);
564− *number = new PhoneNumber();
580+ *number = reinterpret_cast<CxxPhoneNumber *>(new PhoneNumber());
565581 return unmarshal_error_type(
566− PhoneNumberUtil::GetInstance()->Parse(string, region, *number)
582+ PhoneNumberUtil::GetInstance()->Parse(string, region, reinterpret_cast<PhoneNumber *>(*number))
567583 );
568584}
569585
@@ -572,22 +588,24 @@ extern "C" error_type c_phone_number_util_parse_and_keep_raw_input(
572588 size_t c_string_size,
573589 char const *c_region,
574590 size_t c_region_size,
575− PhoneNumber **number
591+ CxxPhoneNumber **number
576592)
577593{
578594 std::string const string(c_string, c_string_size);
579595 std::string const region(c_region, c_region_size);
580− *number = new PhoneNumber();
596+ *number = reinterpret_cast<CxxPhoneNumber *>(new PhoneNumber());
581597 return unmarshal_error_type(
582− PhoneNumberUtil::GetInstance()->ParseAndKeepRawInput(string, region, *number)
598+ PhoneNumberUtil::GetInstance()->ParseAndKeepRawInput(string, region, reinterpret_cast<PhoneNumber *>(*number))
583599 );
584600}
585601
586602extern "C" match_type c_phone_number_util_is_number_match(
587− PhoneNumber const *number1,
588− PhoneNumber const *number2
603+ CxxPhoneNumber const *ptr1,
604+ CxxPhoneNumber const *ptr2
589605)
590606{
607+ auto number1 = reinterpret_cast<PhoneNumber const *>(ptr1);
608+ auto number2 = reinterpret_cast<PhoneNumber const *>(ptr2);
591609 return unmarshal_match_type(
592610 PhoneNumberUtil::GetInstance()->IsNumberMatch(*number1, *number2)
593611 );
@@ -608,11 +626,12 @@ extern "C" match_type c_phone_number_util_is_number_match_with_two_strings(
608626}
609627
610628extern "C" match_type c_phone_number_util_is_number_match_with_one_string(
611− PhoneNumber const *number1,
629+ CxxPhoneNumber const *ptr1,
612630 char const *c_number2,
613631 size_t c_number2_size
614632)
615633{
634+ auto number1 = reinterpret_cast<PhoneNumber const *>(ptr1);
616635 std::string const number2(c_number2, c_number2_size);
617636 return unmarshal_match_type(
618637 PhoneNumberUtil::GetInstance()->IsNumberMatchWithOneString(*number1, number2)