diff --git a/src/ast/type/access_control_type_test.cc b/src/ast/type/access_control_type_test.cc
index 1f52fb5..11a2ae9 100644
--- a/src/ast/type/access_control_type_test.cc
+++ b/src/ast/type/access_control_type_test.cc
@@ -102,7 +102,7 @@
   U32Type u32;
   ArrayType array(&u32, 4);
   ArrayDecorationList decos;
-  decos.push_back(std::make_unique<StrideDecoration>(4, Source{}));
+  decos.push_back(create<StrideDecoration>(4, Source{}));
   array.set_decorations(std::move(decos));
   AccessControlType at{AccessControl::kReadOnly, &array};
   EXPECT_EQ(16u, at.MinBufferBindingSize(MemoryLayout::kUniformBuffer));
@@ -112,7 +112,7 @@
   U32Type u32;
   ArrayType array(&u32);
   ArrayDecorationList decos;
-  decos.push_back(std::make_unique<StrideDecoration>(4, Source{}));
+  decos.push_back(create<StrideDecoration>(4, Source{}));
   array.set_decorations(std::move(decos));
   AccessControlType at{AccessControl::kReadOnly, &array};
   EXPECT_EQ(4u, at.MinBufferBindingSize(MemoryLayout::kUniformBuffer));
@@ -123,19 +123,16 @@
   StructMemberList members;
 
   StructMemberDecorationList deco;
-  deco.push_back(std::make_unique<StructMemberOffsetDecoration>(0, Source{}));
-  members.push_back(
-      std::make_unique<StructMember>("foo", &u32, std::move(deco)));
+  deco.push_back(create<StructMemberOffsetDecoration>(0, Source{}));
+  members.push_back(create<StructMember>("foo", &u32, std::move(deco)));
 
   deco = StructMemberDecorationList();
-  deco.push_back(std::make_unique<StructMemberOffsetDecoration>(4, Source{}));
-  members.push_back(
-      std::make_unique<StructMember>("bar", &u32, std::move(deco)));
+  deco.push_back(create<StructMemberOffsetDecoration>(4, Source{}));
+  members.push_back(create<StructMember>("bar", &u32, std::move(deco)));
 
   ast::StructDecorationList decos;
 
-  auto str =
-      std::make_unique<ast::Struct>(std::move(decos), std::move(members));
+  auto str = create<ast::Struct>(std::move(decos), std::move(members));
   StructType struct_type("struct_type", std::move(str));
   AccessControlType at{AccessControl::kReadOnly, &struct_type};
   EXPECT_EQ(16u, at.MinBufferBindingSize(MemoryLayout::kUniformBuffer));
@@ -152,7 +149,7 @@
   U32Type u32;
   ArrayType array(&u32, 4);
   ArrayDecorationList decos;
-  decos.push_back(std::make_unique<StrideDecoration>(4, Source{}));
+  decos.push_back(create<StrideDecoration>(4, Source{}));
   array.set_decorations(std::move(decos));
   AccessControlType at{AccessControl::kReadOnly, &array};
   EXPECT_EQ(16u, at.BaseAlignment(MemoryLayout::kUniformBuffer));
@@ -162,7 +159,7 @@
   U32Type u32;
   ArrayType array(&u32);
   ArrayDecorationList decos;
-  decos.push_back(std::make_unique<StrideDecoration>(4, Source{}));
+  decos.push_back(create<StrideDecoration>(4, Source{}));
   array.set_decorations(std::move(decos));
   AccessControlType at{AccessControl::kReadOnly, &array};
   EXPECT_EQ(16u, at.BaseAlignment(MemoryLayout::kUniformBuffer));
@@ -174,20 +171,17 @@
 
   {
     StructMemberDecorationList deco;
-    deco.push_back(std::make_unique<StructMemberOffsetDecoration>(0, Source{}));
-    members.push_back(
-        std::make_unique<StructMember>("foo", &u32, std::move(deco)));
+    deco.push_back(create<StructMemberOffsetDecoration>(0, Source{}));
+    members.push_back(create<StructMember>("foo", &u32, std::move(deco)));
   }
   {
     StructMemberDecorationList deco;
-    deco.push_back(std::make_unique<StructMemberOffsetDecoration>(4, Source{}));
-    members.push_back(
-        std::make_unique<StructMember>("bar", &u32, std::move(deco)));
+    deco.push_back(create<StructMemberOffsetDecoration>(4, Source{}));
+    members.push_back(create<StructMember>("bar", &u32, std::move(deco)));
   }
   ast::StructDecorationList decos;
 
-  auto str =
-      std::make_unique<ast::Struct>(std::move(decos), std::move(members));
+  auto str = create<ast::Struct>(std::move(decos), std::move(members));
   StructType struct_type("struct_type", std::move(str));
   AccessControlType at{AccessControl::kReadOnly, &struct_type};
   EXPECT_EQ(16u, at.BaseAlignment(MemoryLayout::kUniformBuffer));
diff --git a/src/ast/type/alias_type_test.cc b/src/ast/type/alias_type_test.cc
index 348728b..e0ff50b 100644
--- a/src/ast/type/alias_type_test.cc
+++ b/src/ast/type/alias_type_test.cc
@@ -165,7 +165,7 @@
   U32Type u32;
   ArrayType array(&u32, 4);
   ArrayDecorationList decos;
-  decos.push_back(std::make_unique<StrideDecoration>(4, Source{}));
+  decos.push_back(create<StrideDecoration>(4, Source{}));
   array.set_decorations(std::move(decos));
   AliasType alias{"alias", &array};
   EXPECT_EQ(16u, alias.MinBufferBindingSize(MemoryLayout::kUniformBuffer));
@@ -175,7 +175,7 @@
   U32Type u32;
   ArrayType array(&u32);
   ArrayDecorationList decos;
-  decos.push_back(std::make_unique<StrideDecoration>(4, Source{}));
+  decos.push_back(create<StrideDecoration>(4, Source{}));
   array.set_decorations(std::move(decos));
   AliasType alias{"alias", &array};
   EXPECT_EQ(4u, alias.MinBufferBindingSize(MemoryLayout::kUniformBuffer));
@@ -187,20 +187,17 @@
 
   {
     StructMemberDecorationList deco;
-    deco.push_back(std::make_unique<StructMemberOffsetDecoration>(0, Source{}));
-    members.push_back(
-        std::make_unique<StructMember>("foo", &u32, std::move(deco)));
+    deco.push_back(create<StructMemberOffsetDecoration>(0, Source{}));
+    members.push_back(create<StructMember>("foo", &u32, std::move(deco)));
   }
   {
     StructMemberDecorationList deco;
-    deco.push_back(std::make_unique<StructMemberOffsetDecoration>(4, Source{}));
-    members.push_back(
-        std::make_unique<StructMember>("bar", &u32, std::move(deco)));
+    deco.push_back(create<StructMemberOffsetDecoration>(4, Source{}));
+    members.push_back(create<StructMember>("bar", &u32, std::move(deco)));
   }
   ast::StructDecorationList decos;
 
-  auto str =
-      std::make_unique<ast::Struct>(std::move(decos), std::move(members));
+  auto str = create<ast::Struct>(std::move(decos), std::move(members));
   StructType struct_type("struct_type", std::move(str));
   AliasType alias{"alias", &struct_type};
   EXPECT_EQ(16u, alias.MinBufferBindingSize(MemoryLayout::kUniformBuffer));
@@ -217,7 +214,7 @@
   U32Type u32;
   ArrayType array(&u32, 4);
   ArrayDecorationList decos;
-  decos.push_back(std::make_unique<StrideDecoration>(4, Source{}));
+  decos.push_back(create<StrideDecoration>(4, Source{}));
   array.set_decorations(std::move(decos));
   AliasType alias{"alias", &array};
   EXPECT_EQ(16u, alias.BaseAlignment(MemoryLayout::kUniformBuffer));
@@ -227,7 +224,7 @@
   U32Type u32;
   ArrayType array(&u32);
   ArrayDecorationList decos;
-  decos.push_back(std::make_unique<StrideDecoration>(4, Source{}));
+  decos.push_back(create<StrideDecoration>(4, Source{}));
   array.set_decorations(std::move(decos));
   AliasType alias{"alias", &array};
   EXPECT_EQ(16u, alias.BaseAlignment(MemoryLayout::kUniformBuffer));
@@ -239,20 +236,17 @@
 
   {
     StructMemberDecorationList deco;
-    deco.push_back(std::make_unique<StructMemberOffsetDecoration>(0, Source{}));
-    members.push_back(
-        std::make_unique<StructMember>("foo", &u32, std::move(deco)));
+    deco.push_back(create<StructMemberOffsetDecoration>(0, Source{}));
+    members.push_back(create<StructMember>("foo", &u32, std::move(deco)));
   }
   {
     StructMemberDecorationList deco;
-    deco.push_back(std::make_unique<StructMemberOffsetDecoration>(4, Source{}));
-    members.push_back(
-        std::make_unique<StructMember>("bar", &u32, std::move(deco)));
+    deco.push_back(create<StructMemberOffsetDecoration>(4, Source{}));
+    members.push_back(create<StructMember>("bar", &u32, std::move(deco)));
   }
   ast::StructDecorationList decos;
 
-  auto str =
-      std::make_unique<ast::Struct>(std::move(decos), std::move(members));
+  auto str = create<ast::Struct>(std::move(decos), std::move(members));
   StructType struct_type("struct_type", std::move(str));
   AliasType alias{"alias", &struct_type};
   EXPECT_EQ(16u, alias.BaseAlignment(MemoryLayout::kUniformBuffer));
diff --git a/src/ast/type/array_type_test.cc b/src/ast/type/array_type_test.cc
index 958bf41..a0f745c 100644
--- a/src/ast/type/array_type_test.cc
+++ b/src/ast/type/array_type_test.cc
@@ -81,7 +81,7 @@
 TEST_F(ArrayTypeTest, TypeName_WithStride) {
   I32Type i32;
   ArrayDecorationList decos;
-  decos.push_back(std::make_unique<StrideDecoration>(16, Source{}));
+  decos.push_back(create<StrideDecoration>(16, Source{}));
 
   ArrayType arr{&i32, 3};
   arr.set_decorations(std::move(decos));
@@ -97,7 +97,7 @@
 TEST_F(ArrayTypeTest, MinBufferBindingSizeArray) {
   U32Type u32;
   ArrayDecorationList decos;
-  decos.push_back(std::make_unique<StrideDecoration>(4, Source{}));
+  decos.push_back(create<StrideDecoration>(4, Source{}));
 
   ArrayType arr(&u32, 4);
   arr.set_decorations(std::move(decos));
@@ -107,7 +107,7 @@
 TEST_F(ArrayTypeTest, MinBufferBindingSizeRuntimeArray) {
   U32Type u32;
   ArrayDecorationList decos;
-  decos.push_back(std::make_unique<StrideDecoration>(4, Source{}));
+  decos.push_back(create<StrideDecoration>(4, Source{}));
 
   ArrayType arr(&u32);
   arr.set_decorations(std::move(decos));
@@ -117,7 +117,7 @@
 TEST_F(ArrayTypeTest, BaseAlignmentArray) {
   U32Type u32;
   ArrayDecorationList decos;
-  decos.push_back(std::make_unique<StrideDecoration>(4, Source{}));
+  decos.push_back(create<StrideDecoration>(4, Source{}));
 
   ArrayType arr(&u32, 4);
   arr.set_decorations(std::move(decos));
@@ -128,7 +128,7 @@
 TEST_F(ArrayTypeTest, BaseAlignmentRuntimeArray) {
   U32Type u32;
   ArrayDecorationList decos;
-  decos.push_back(std::make_unique<StrideDecoration>(4, Source{}));
+  decos.push_back(create<StrideDecoration>(4, Source{}));
 
   ArrayType arr(&u32);
   arr.set_decorations(std::move(decos));
diff --git a/src/ast/type/struct_type_test.cc b/src/ast/type/struct_type_test.cc
index 9189bf4..adbc30c 100644
--- a/src/ast/type/struct_type_test.cc
+++ b/src/ast/type/struct_type_test.cc
@@ -34,14 +34,14 @@
 using StructTypeTest = TestHelper;
 
 TEST_F(StructTypeTest, Creation) {
-  auto impl = std::make_unique<Struct>();
+  auto impl = create<Struct>();
   auto* ptr = impl.get();
   StructType s{"S", std::move(impl)};
   EXPECT_EQ(s.impl(), ptr);
 }
 
 TEST_F(StructTypeTest, Is) {
-  auto impl = std::make_unique<Struct>();
+  auto impl = create<Struct>();
   StructType s{"S", std::move(impl)};
   EXPECT_FALSE(s.IsAccessControl());
   EXPECT_FALSE(s.IsAlias());
@@ -59,7 +59,7 @@
 }
 
 TEST_F(StructTypeTest, TypeName) {
-  auto impl = std::make_unique<Struct>();
+  auto impl = create<Struct>();
   StructType s{"my_struct", std::move(impl)};
   EXPECT_EQ(s.type_name(), "__struct_my_struct");
 }
@@ -70,20 +70,17 @@
 
   {
     StructMemberDecorationList deco;
-    deco.push_back(std::make_unique<StructMemberOffsetDecoration>(0, Source{}));
-    members.push_back(
-        std::make_unique<StructMember>("foo", &u32, std::move(deco)));
+    deco.push_back(create<StructMemberOffsetDecoration>(0, Source{}));
+    members.push_back(create<StructMember>("foo", &u32, std::move(deco)));
   }
   {
     StructMemberDecorationList deco;
-    deco.push_back(std::make_unique<StructMemberOffsetDecoration>(4, Source{}));
-    members.push_back(
-        std::make_unique<StructMember>("bar", &u32, std::move(deco)));
+    deco.push_back(create<StructMemberOffsetDecoration>(4, Source{}));
+    members.push_back(create<StructMember>("bar", &u32, std::move(deco)));
   }
   ast::StructDecorationList decos;
 
-  auto str =
-      std::make_unique<ast::Struct>(std::move(decos), std::move(members));
+  auto str = create<ast::Struct>(std::move(decos), std::move(members));
   StructType struct_type("struct_type", std::move(str));
   EXPECT_EQ(16u,
             struct_type.MinBufferBindingSize(MemoryLayout::kUniformBuffer));
@@ -95,33 +92,29 @@
   ArrayType arr(&u32, 4);
   {
     ArrayDecorationList decos;
-    decos.push_back(std::make_unique<StrideDecoration>(4, Source{}));
+    decos.push_back(create<StrideDecoration>(4, Source{}));
     arr.set_decorations(std::move(decos));
   }
 
   StructMemberList members;
   {
     StructMemberDecorationList deco;
-    deco.push_back(std::make_unique<StructMemberOffsetDecoration>(0, Source{}));
-    members.push_back(
-        std::make_unique<StructMember>("foo", &u32, std::move(deco)));
+    deco.push_back(create<StructMemberOffsetDecoration>(0, Source{}));
+    members.push_back(create<StructMember>("foo", &u32, std::move(deco)));
   }
   {
     StructMemberDecorationList deco;
-    deco.push_back(std::make_unique<StructMemberOffsetDecoration>(4, Source{}));
-    members.push_back(
-        std::make_unique<StructMember>("bar", &u32, std::move(deco)));
+    deco.push_back(create<StructMemberOffsetDecoration>(4, Source{}));
+    members.push_back(create<StructMember>("bar", &u32, std::move(deco)));
   }
   {
     StructMemberDecorationList deco;
-    deco.push_back(std::make_unique<StructMemberOffsetDecoration>(8, Source{}));
-    members.push_back(
-        std::make_unique<StructMember>("bar", &arr, std::move(deco)));
+    deco.push_back(create<StructMemberOffsetDecoration>(8, Source{}));
+    members.push_back(create<StructMember>("bar", &arr, std::move(deco)));
   }
   ast::StructDecorationList decos;
 
-  auto str =
-      std::make_unique<ast::Struct>(std::move(decos), std::move(members));
+  auto str = create<ast::Struct>(std::move(decos), std::move(members));
   StructType struct_type("struct_type", std::move(str));
   EXPECT_EQ(32u,
             struct_type.MinBufferBindingSize(MemoryLayout::kUniformBuffer));
@@ -134,33 +127,29 @@
   ArrayType arr(&u32);
   {
     ArrayDecorationList decos;
-    decos.push_back(std::make_unique<StrideDecoration>(4, Source{}));
+    decos.push_back(create<StrideDecoration>(4, Source{}));
     arr.set_decorations(std::move(decos));
   }
 
   StructMemberList members;
   {
     StructMemberDecorationList deco;
-    deco.push_back(std::make_unique<StructMemberOffsetDecoration>(0, Source{}));
-    members.push_back(
-        std::make_unique<StructMember>("foo", &u32, std::move(deco)));
+    deco.push_back(create<StructMemberOffsetDecoration>(0, Source{}));
+    members.push_back(create<StructMember>("foo", &u32, std::move(deco)));
   }
   {
     StructMemberDecorationList deco;
-    deco.push_back(std::make_unique<StructMemberOffsetDecoration>(4, Source{}));
-    members.push_back(
-        std::make_unique<StructMember>("bar", &u32, std::move(deco)));
+    deco.push_back(create<StructMemberOffsetDecoration>(4, Source{}));
+    members.push_back(create<StructMember>("bar", &u32, std::move(deco)));
   }
   {
     StructMemberDecorationList deco;
-    deco.push_back(std::make_unique<StructMemberOffsetDecoration>(8, Source{}));
-    members.push_back(
-        std::make_unique<StructMember>("bar", &u32, std::move(deco)));
+    deco.push_back(create<StructMemberOffsetDecoration>(8, Source{}));
+    members.push_back(create<StructMember>("bar", &u32, std::move(deco)));
   }
   ast::StructDecorationList decos;
 
-  auto str =
-      std::make_unique<ast::Struct>(std::move(decos), std::move(members));
+  auto str = create<ast::Struct>(std::move(decos), std::move(members));
   StructType struct_type("struct_type", std::move(str));
   EXPECT_EQ(12u,
             struct_type.MinBufferBindingSize(MemoryLayout::kStorageBuffer));
@@ -173,14 +162,12 @@
   StructMemberList members;
   {
     StructMemberDecorationList deco;
-    deco.push_back(std::make_unique<StructMemberOffsetDecoration>(0, Source{}));
-    members.push_back(
-        std::make_unique<StructMember>("foo", &vec2, std::move(deco)));
+    deco.push_back(create<StructMemberOffsetDecoration>(0, Source{}));
+    members.push_back(create<StructMember>("foo", &vec2, std::move(deco)));
   }
   ast::StructDecorationList decos;
 
-  auto str =
-      std::make_unique<ast::Struct>(std::move(decos), std::move(members));
+  auto str = create<ast::Struct>(std::move(decos), std::move(members));
   StructType struct_type("struct_type", std::move(str));
   EXPECT_EQ(16u,
             struct_type.MinBufferBindingSize(MemoryLayout::kUniformBuffer));
@@ -194,14 +181,12 @@
   StructMemberList members;
   {
     StructMemberDecorationList deco;
-    deco.push_back(std::make_unique<StructMemberOffsetDecoration>(0, Source{}));
-    members.push_back(
-        std::make_unique<StructMember>("foo", &vec3, std::move(deco)));
+    deco.push_back(create<StructMemberOffsetDecoration>(0, Source{}));
+    members.push_back(create<StructMember>("foo", &vec3, std::move(deco)));
   }
   ast::StructDecorationList decos;
 
-  auto str =
-      std::make_unique<ast::Struct>(std::move(decos), std::move(members));
+  auto str = create<ast::Struct>(std::move(decos), std::move(members));
   StructType struct_type("struct_type", std::move(str));
   EXPECT_EQ(16u,
             struct_type.MinBufferBindingSize(MemoryLayout::kUniformBuffer));
@@ -216,14 +201,12 @@
   StructMemberList members;
   {
     StructMemberDecorationList deco;
-    deco.push_back(std::make_unique<StructMemberOffsetDecoration>(0, Source{}));
-    members.push_back(
-        std::make_unique<StructMember>("foo", &vec4, std::move(deco)));
+    deco.push_back(create<StructMemberOffsetDecoration>(0, Source{}));
+    members.push_back(create<StructMember>("foo", &vec4, std::move(deco)));
   }
   ast::StructDecorationList decos;
 
-  auto str =
-      std::make_unique<ast::Struct>(std::move(decos), std::move(members));
+  auto str = create<ast::Struct>(std::move(decos), std::move(members));
   StructType struct_type("struct_type", std::move(str));
   EXPECT_EQ(16u,
             struct_type.MinBufferBindingSize(MemoryLayout::kUniformBuffer));
@@ -237,20 +220,17 @@
 
   {
     StructMemberDecorationList deco;
-    deco.push_back(std::make_unique<StructMemberOffsetDecoration>(0, Source{}));
-    members.push_back(
-        std::make_unique<StructMember>("foo", &u32, std::move(deco)));
+    deco.push_back(create<StructMemberOffsetDecoration>(0, Source{}));
+    members.push_back(create<StructMember>("foo", &u32, std::move(deco)));
   }
   {
     StructMemberDecorationList deco;
-    deco.push_back(std::make_unique<StructMemberOffsetDecoration>(4, Source{}));
-    members.push_back(
-        std::make_unique<StructMember>("bar", &u32, std::move(deco)));
+    deco.push_back(create<StructMemberOffsetDecoration>(4, Source{}));
+    members.push_back(create<StructMember>("bar", &u32, std::move(deco)));
   }
   ast::StructDecorationList decos;
 
-  auto str =
-      std::make_unique<ast::Struct>(std::move(decos), std::move(members));
+  auto str = create<ast::Struct>(std::move(decos), std::move(members));
   StructType struct_type("struct_type", std::move(str));
   EXPECT_EQ(16u, struct_type.BaseAlignment(MemoryLayout::kUniformBuffer));
   EXPECT_EQ(4u, struct_type.BaseAlignment(MemoryLayout::kStorageBuffer));
@@ -261,33 +241,29 @@
   ArrayType arr(&u32, 4);
   {
     ArrayDecorationList decos;
-    decos.push_back(std::make_unique<StrideDecoration>(4, Source{}));
+    decos.push_back(create<StrideDecoration>(4, Source{}));
     arr.set_decorations(std::move(decos));
   }
 
   StructMemberList members;
   {
     StructMemberDecorationList deco;
-    deco.push_back(std::make_unique<StructMemberOffsetDecoration>(0, Source{}));
-    members.push_back(
-        std::make_unique<StructMember>("foo", &u32, std::move(deco)));
+    deco.push_back(create<StructMemberOffsetDecoration>(0, Source{}));
+    members.push_back(create<StructMember>("foo", &u32, std::move(deco)));
   }
   {
     StructMemberDecorationList deco;
-    deco.push_back(std::make_unique<StructMemberOffsetDecoration>(4, Source{}));
-    members.push_back(
-        std::make_unique<StructMember>("bar", &u32, std::move(deco)));
+    deco.push_back(create<StructMemberOffsetDecoration>(4, Source{}));
+    members.push_back(create<StructMember>("bar", &u32, std::move(deco)));
   }
   {
     StructMemberDecorationList deco;
-    deco.push_back(std::make_unique<StructMemberOffsetDecoration>(8, Source{}));
-    members.push_back(
-        std::make_unique<StructMember>("bar", &arr, std::move(deco)));
+    deco.push_back(create<StructMemberOffsetDecoration>(8, Source{}));
+    members.push_back(create<StructMember>("bar", &arr, std::move(deco)));
   }
   ast::StructDecorationList decos;
 
-  auto str =
-      std::make_unique<ast::Struct>(std::move(decos), std::move(members));
+  auto str = create<ast::Struct>(std::move(decos), std::move(members));
   StructType struct_type("struct_type", std::move(str));
   EXPECT_EQ(16u, struct_type.BaseAlignment(MemoryLayout::kUniformBuffer));
   EXPECT_EQ(4u, struct_type.BaseAlignment(MemoryLayout::kStorageBuffer));
@@ -298,33 +274,29 @@
   ArrayType arr(&u32);
   {
     ArrayDecorationList decos;
-    decos.push_back(std::make_unique<StrideDecoration>(4, Source{}));
+    decos.push_back(create<StrideDecoration>(4, Source{}));
     arr.set_decorations(std::move(decos));
   }
 
   StructMemberList members;
   {
     StructMemberDecorationList deco;
-    deco.push_back(std::make_unique<StructMemberOffsetDecoration>(0, Source{}));
-    members.push_back(
-        std::make_unique<StructMember>("foo", &u32, std::move(deco)));
+    deco.push_back(create<StructMemberOffsetDecoration>(0, Source{}));
+    members.push_back(create<StructMember>("foo", &u32, std::move(deco)));
   }
   {
     StructMemberDecorationList deco;
-    deco.push_back(std::make_unique<StructMemberOffsetDecoration>(4, Source{}));
-    members.push_back(
-        std::make_unique<StructMember>("bar", &u32, std::move(deco)));
+    deco.push_back(create<StructMemberOffsetDecoration>(4, Source{}));
+    members.push_back(create<StructMember>("bar", &u32, std::move(deco)));
   }
   {
     StructMemberDecorationList deco;
-    deco.push_back(std::make_unique<StructMemberOffsetDecoration>(8, Source{}));
-    members.push_back(
-        std::make_unique<StructMember>("bar", &u32, std::move(deco)));
+    deco.push_back(create<StructMemberOffsetDecoration>(8, Source{}));
+    members.push_back(create<StructMember>("bar", &u32, std::move(deco)));
   }
   ast::StructDecorationList decos;
 
-  auto str =
-      std::make_unique<ast::Struct>(std::move(decos), std::move(members));
+  auto str = create<ast::Struct>(std::move(decos), std::move(members));
   StructType struct_type("struct_type", std::move(str));
   EXPECT_EQ(4u, struct_type.BaseAlignment(MemoryLayout::kStorageBuffer));
 }
@@ -336,14 +308,12 @@
   StructMemberList members;
   {
     StructMemberDecorationList deco;
-    deco.push_back(std::make_unique<StructMemberOffsetDecoration>(0, Source{}));
-    members.push_back(
-        std::make_unique<StructMember>("foo", &vec2, std::move(deco)));
+    deco.push_back(create<StructMemberOffsetDecoration>(0, Source{}));
+    members.push_back(create<StructMember>("foo", &vec2, std::move(deco)));
   }
   ast::StructDecorationList decos;
 
-  auto str =
-      std::make_unique<ast::Struct>(std::move(decos), std::move(members));
+  auto str = create<ast::Struct>(std::move(decos), std::move(members));
   StructType struct_type("struct_type", std::move(str));
   EXPECT_EQ(16u, struct_type.BaseAlignment(MemoryLayout::kUniformBuffer));
   EXPECT_EQ(8u, struct_type.BaseAlignment(MemoryLayout::kStorageBuffer));
@@ -356,14 +326,12 @@
   StructMemberList members;
   {
     StructMemberDecorationList deco;
-    deco.push_back(std::make_unique<StructMemberOffsetDecoration>(0, Source{}));
-    members.push_back(
-        std::make_unique<StructMember>("foo", &vec3, std::move(deco)));
+    deco.push_back(create<StructMemberOffsetDecoration>(0, Source{}));
+    members.push_back(create<StructMember>("foo", &vec3, std::move(deco)));
   }
   ast::StructDecorationList decos;
 
-  auto str =
-      std::make_unique<ast::Struct>(std::move(decos), std::move(members));
+  auto str = create<ast::Struct>(std::move(decos), std::move(members));
   StructType struct_type("struct_type", std::move(str));
   EXPECT_EQ(16u, struct_type.BaseAlignment(MemoryLayout::kUniformBuffer));
   EXPECT_EQ(16u, struct_type.BaseAlignment(MemoryLayout::kStorageBuffer));
@@ -376,14 +344,12 @@
   StructMemberList members;
   {
     StructMemberDecorationList deco;
-    deco.push_back(std::make_unique<StructMemberOffsetDecoration>(0, Source{}));
-    members.push_back(
-        std::make_unique<StructMember>("foo", &vec4, std::move(deco)));
+    deco.push_back(create<StructMemberOffsetDecoration>(0, Source{}));
+    members.push_back(create<StructMember>("foo", &vec4, std::move(deco)));
   }
   ast::StructDecorationList decos;
 
-  auto str =
-      std::make_unique<ast::Struct>(std::move(decos), std::move(members));
+  auto str = create<ast::Struct>(std::move(decos), std::move(members));
   StructType struct_type("struct_type", std::move(str));
   EXPECT_EQ(16u, struct_type.BaseAlignment(MemoryLayout::kUniformBuffer));
   EXPECT_EQ(16u, struct_type.BaseAlignment(MemoryLayout::kStorageBuffer));
