Fix ODR violations in cases where templates are involved
diff --git a/compiler/cpp/src/thrift/generate/t_cpp_generator.cc b/compiler/cpp/src/thrift/generate/t_cpp_generator.cc
index 2a65bfb..a085ada 100644
--- a/compiler/cpp/src/thrift/generate/t_cpp_generator.cc
+++ b/compiler/cpp/src/thrift/generate/t_cpp_generator.cc
@@ -1432,7 +1432,10 @@
if (!pointers)
{
- generate_default_constructor(out, tstruct, false);
+ // 'force_cpp_out' always goes into the .cpp file, and never into a .tcc
+ // file in case templates are involved. Since the constructor is not templated,
+ // putting it into the (later included) .tcc file would cause ODR violations.
+ generate_default_constructor(force_cpp_out, tstruct, false);
}
// Create a setter function for each field