diff --git a/maud/tests/splices.rs b/maud/tests/splices.rs
index d3fd511..8665e84 100644
--- a/maud/tests/splices.rs
+++ b/maud/tests/splices.rs
@@ -124,3 +124,9 @@ fn nested_macro_invocation() {
     let result = html! { (format!("{best_pony} is best pony")) };
     assert_eq!(result.into_string(), "Pinkie Pie is best pony");
 }
+
+#[test]
+fn expression_grouping() {
+    let result = html! { (1 + 1) };
+    assert_eq!(result.into_string(), "2");
+}
diff --git a/maud_macros/src/generate.rs b/maud_macros/src/generate.rs
index c9ba9fb..ee27a55 100644
--- a/maud_macros/src/generate.rs
+++ b/maud_macros/src/generate.rs
@@ -103,7 +103,7 @@ impl Generator {
 
     fn splice(&self, expr: TokenStream, build: &mut Builder) {
         let output_ident = self.output_ident.clone();
-        build.push_tokens(quote!(maud::macro_private::render_to!(&#expr, &mut #output_ident);));
+        build.push_tokens(quote!(maud::macro_private::render_to!(&(#expr), &mut #output_ident);));
     }
 
     fn element(&self, name: TokenStream, attrs: Vec<Attr>, body: ElementBody, build: &mut Builder) {