Add --no-cc-enum-traits param

Add a `--no-cc-enum-traits` param that can be used to disable the
generation of C++ `EnumTrait` structures.
diff --git a/compiler/back_end/cpp/emboss_codegen_cpp.py b/compiler/back_end/cpp/emboss_codegen_cpp.py
index ed5e66e..4ac71f0 100644
--- a/compiler/back_end/cpp/emboss_codegen_cpp.py
+++ b/compiler/back_end/cpp/emboss_codegen_cpp.py
@@ -45,6 +45,11 @@
                       choices=["always", "never", "if_tty", "auto"],
                       help="Print error messages using color.  'auto' is a "
                            "synonym for 'if_tty'.")
+  parser.add_argument("--cc-enum-traits",
+                      action=argparse.BooleanOptionalAction,
+                      default=True,
+                      help="""Controls generation of EnumTraits by the C++
+                              backend""")
   return parser.parse_args(argv[1:])
 
 
@@ -58,17 +63,18 @@
                 os.isatty(sys.stderr.fileno())))
   print(error.format_errors(errors, source_codes, use_color), file=sys.stderr)
 
-def generate_headers_and_log_errors(ir, color_output):
+def generate_headers_and_log_errors(ir, color_output, config: header_generator.Config):
   """Generates a C++ header and logs any errors.
 
   Arguments:
     ir: EmbossIr of the module.
     color_output: "always", "never", "if_tty", "auto"
+    config: Header generation configuration.
 
   Returns:
     A tuple of (header, errors)
   """
-  header, errors = header_generator.generate_header(ir)
+  header, errors = header_generator.generate_header(ir, config)
   if errors:
     _show_errors(errors, ir, color_output)
   return (header, errors)
@@ -79,7 +85,8 @@
       ir = ir_pb2.EmbossIr.from_json(f.read())
   else:
     ir = ir_pb2.EmbossIr.from_json(sys.stdin.read())
-  header, errors = generate_headers_and_log_errors(ir, flags.color_output)
+  config = header_generator.Config(include_enum_traits=flags.cc_enum_traits)
+  header, errors = generate_headers_and_log_errors(ir, flags.color_output, config)
   if errors:
     return 1
   if flags.output_file:
diff --git a/embossc b/embossc
index 0dac79f..7bc0227 100755
--- a/embossc
+++ b/embossc
@@ -20,6 +20,7 @@
 import os
 import sys
 
+
 def _parse_args(argv):
   parser = argparse.ArgumentParser(description="Emboss compiler")
   parser.add_argument("--color-output",
@@ -49,6 +50,11 @@
                       nargs=1,
                       help="""File name to be used for the generated output
                               file. Defaults to input_file suffixed by '.h'""")
+  parser.add_argument("--cc-enum-traits",
+                      action=argparse.BooleanOptionalAction,
+                      default=True,
+                      help="""Controls generation of EnumTraits by the C++
+                              backend""")
   parser.add_argument("input_file",
                       type=str,
                       nargs=1,
@@ -62,7 +68,7 @@
   sys.path.append(base_path)
 
   from compiler.back_end.cpp import ( # pylint:disable=import-outside-toplevel
-    emboss_codegen_cpp
+    emboss_codegen_cpp, header_generator
   )
   from compiler.front_end import ( # pylint:disable=import-outside-toplevel
     emboss_front_end
@@ -74,8 +80,9 @@
   if errors:
     return 1
 
+  config = header_generator.Config(include_enum_traits=flags.cc_enum_traits)
   header, errors = emboss_codegen_cpp.generate_headers_and_log_errors(
-      ir, flags.color_output)
+      ir, flags.color_output, config)
 
   if errors:
     return 1