in cppwinrt/type_writers.h [467:523]
void write(TypeSig::value_type const& type)
{
call(type,
[&](ElementType type)
{
if (type == ElementType::Boolean) { write("bool"); }
else if (type == ElementType::Char) { write("char16_t"); }
else if (type == ElementType::I1) { write("int8_t"); }
else if (type == ElementType::U1) { write("uint8_t"); }
else if (type == ElementType::I2) { write("int16_t"); }
else if (type == ElementType::U2) { write("uint16_t"); }
else if (type == ElementType::I4) { write("int32_t"); }
else if (type == ElementType::U4) { write("uint32_t"); }
else if (type == ElementType::I8) { write("int64_t"); }
else if (type == ElementType::U8) { write("uint64_t"); }
else if (type == ElementType::R4) { write("float"); }
else if (type == ElementType::R8) { write("double"); }
else if (type == ElementType::String)
{
if (abi_types)
{
write("void*");
}
else if (consume_types)
{
write("param::hstring");
}
else
{
write("hstring");
}
}
else if (type == ElementType::Object)
{
if (abi_types)
{
write("void*");
}
else
{
write("winrt::Windows::Foundation::IInspectable");
}
}
else
{
assert(false);
}
},
[&](GenericTypeIndex var)
{
write(generic_param_stack.back()[var.index]);
},
[&](auto&& type)
{
write(type);
});
}