C++: the type of all integer constants wrongly deduced as `int32_t`
The failed test `tests\formats\yaml_ints.ksy`
```yaml
# Tests "forgiving" YAML KS expression parsing
meta:
  id: yaml_ints
instances:
  test_u4_dec:
    value: 4294967295
  test_u4_hex:
    value: 0xffffffff
  test_u8_dec:
    value: 18446744073709551615
  test_u8_hex:
    value: 0xffffffffffffffff
```
is failed on clang, but successful on MSVC (which seems incorrect here). The failure is
```
check r->test_u4_dec() == 4294967295UL failed [-1 != 4294967295]
```
The generated code is:
```cpp
// Autogenerated from KST: please remove this line if doing any edits by hand!

#include <boost/test/unit_test.hpp>
#include "yaml_ints.h"
#include <iostream>
#include <fstream>
#include <vector>

BOOST_AUTO_TEST_CASE(test_yaml_ints) {
    std::ifstream ifs("src/fixed_struct.bin", std::ifstream::binary);
    kaitai::kstream ks(&ifs);
    yaml_ints_t* r = new yaml_ints_t(&ks);

    BOOST_CHECK_EQUAL(r->test_u4_dec(), 4294967295UL);
    BOOST_CHECK_EQUAL(r->test_u4_hex(), 4294967295UL);
    BOOST_CHECK_EQUAL(r->test_u8_dec(), 18446744073709551615ULL);
    BOOST_CHECK_EQUAL(r->test_u8_hex(), 18446744073709551615ULL);

    delete r;
}
```
The reason is because the type of `test_u4_dec` parse instance is [deduced](https://github.com/kaitai-io/kaitai_struct_compiler/blob/6aef6faeb00d4800d493460bc0f83483e60bad01/shared/src/main/scala/io/kaitai/struct/translators/TypeDetector.scala#L39-L42) as `CalcIntType`, which is [rendered](https://github.com/kaitai-io/kaitai_struct_compiler/blob/6aef6faeb00d4800d493460bc0f83483e60bad01/shared/src/main/scala/io/kaitai/struct/languages/CppCompiler.scala#L1077) by C++ backend as `int32_t`.

The type of `4294967295UL` constant, however, definitely not `int32_t` (it is `uint32_t` or `uint64_t`, I'm not an expert in C++ to be sure, but at least it is unsigned). Comparison of `int32_t` with `4294967295UL` [detected](https://godbolt.org/z/P1MKdMrvo) as `false` by GCC and clang at compilation stage.