An IDL file like the following will produce C++ code that cannot compile:
structs: int_basic_ranges: description: Struct using basic range validators on ints fields: positive_int: type: int validator: { gt: 0 } chained_callback_validators: description: Uses a chained struct that includes fields with validators chained_structs: int_basic_ranges: int_basic_ranges
The generated Chained_callback_validators class will define the required validatePositive_int() method in its cpp file, but it will not declare the method in its header, leading to a compilation error.
The following rule in generator.py's _CppHeaderFileWriter.generate is to blame:
if [field for field in struct.fields if field.validator]: self.write_unindented_line('private:') for field in struct.fields: if not field.ignore and not struct.immutable and \ not field.chained_struct_field and field.validator: self.gen_validators(field)
We have no IDL structs today that include structs with field validators. (I discovered the problem while creating such a struct, then changed my mind about whether I needed that struct.) Let's fix the bug anyway, while we understand it.