Merge pull request #149 from EricRahm/use_dataclass

Convert `ir_data` to a `dataclass`
diff --git a/build_defs.bzl b/build_defs.bzl
index 0c1e6a8..80bdd20 100644
--- a/build_defs.bzl
+++ b/build_defs.bzl
@@ -26,7 +26,7 @@
 
 load("@bazel_tools//tools/cpp:toolchain_utils.bzl", "find_cpp_toolchain")
 
-def emboss_cc_library(name, srcs, deps = [], visibility = None, import_dirs = [], enable_enum_traits = True):
+def emboss_cc_library(name, srcs, deps = [], visibility = None, import_dirs = [], enable_enum_traits = True, **kwargs):
     """Constructs a C++ library from an .emb file."""
     if len(srcs) != 1:
         fail(
@@ -39,6 +39,7 @@
         srcs = srcs,
         deps = [dep + "_ir" for dep in deps],
         import_dirs = import_dirs,
+        **kwargs
     )
 
     cc_emboss_library(
@@ -46,6 +47,7 @@
         deps = [":" + name + "_ir"],
         visibility = visibility,
         enable_enum_traits = enable_enum_traits,
+        **kwargs
     )
 
 # Full Starlark rules for emboss_library and cc_emboss_library.
diff --git a/compiler/back_end/cpp/generated_code_templates b/compiler/back_end/cpp/generated_code_templates
index a0acc68..5325852 100644
--- a/compiler/back_end/cpp/generated_code_templates
+++ b/compiler/back_end/cpp/generated_code_templates
@@ -33,7 +33,6 @@
 #include <string.h>
 
 #include <algorithm>
-#include <ostream>
 #include <type_traits>
 #include <utility>
 
diff --git a/runtime/cpp/emboss_arithmetic.h b/runtime/cpp/emboss_arithmetic.h
index ee2cb40..ede3dd1 100644
--- a/runtime/cpp/emboss_arithmetic.h
+++ b/runtime/cpp/emboss_arithmetic.h
@@ -89,7 +89,7 @@
           typename... ArgsT>
 inline constexpr Maybe<ResultT> MaybeDo(Maybe<ArgsT>... args) {
   return AllKnown(args...)
-             ? Maybe<ResultT>(static_cast<ResultT>(OperatorT::template Do(
+             ? Maybe<ResultT>(static_cast<ResultT>(OperatorT::template Do<>(
                    static_cast<IntermediateT>(args.ValueOrDefault())...)))
              : Maybe<ResultT>();
 }
diff --git a/testdata/BUILD b/testdata/BUILD
index a886d39..923dcf3 100644
--- a/testdata/BUILD
+++ b/testdata/BUILD
@@ -108,6 +108,9 @@
     srcs = [
         "enum.emb",
     ],
+    # This tag is arbitrary, and exists to ensure you can pass atributes common
+    # to all build rules to the underlying rules.
+    tags = ["an_arbitrary_tag"],
 )
 
 emboss_cc_library(