mirror of
https://github.com/JakeHillion/object-introspection.git
synced 2024-09-19 19:19:05 +01:00
3d91603c8e
std::basic_string takes three template parameters: 1. CharT 2. Traits 3. Allocator The Traits parameter was causing issues, as it requires a type which exposes certain things, e.g. `Traits::value_type`. We have a few options to resolve this: 1. Remove this parameter, as we do for allocators Cons: removing a template parameter doesn't work if other parameters appear after it 2. Stub this parameter, as we do for hashers/comparators Cons: we need to hardcode an implementation that satisfies the `Traits::value_type` requirements 3. Leave the parameter as-is Cons: will not work if a non-standard Traits is used By using the real implementation of this Traits parameter (normally `std::char_traits<CharT>`), we get one that we know will work as long as it is defined in a stdlib header. Option 3 is what we use in this patch. Instead of adding more configuration options to the container TOML file format (e.g. `params_to_keep = [1]`), we add `std::char_traits` as a dummy container type. Now, whenever `std::char_traits` appears, it will be left as-is, i.e. not removed, replaced or reverse-engineered. This is the same approach previously used for Thrift's isset_bitset.
18 lines
236 B
TOML
18 lines
236 B
TOML
[info]
|
|
type_name = "std::char_traits"
|
|
ctype = "DUMMY_TYPE"
|
|
header = "string"
|
|
|
|
# Old:
|
|
typeName = "std::char_traits<"
|
|
ns = ["namespace std"]
|
|
numTemplateParams = 1
|
|
|
|
[codegen]
|
|
decl = """
|
|
// DummyDecl %1%
|
|
"""
|
|
func = """
|
|
// DummyFunc %1%
|
|
"""
|