diff --git a/acxxel/CMakeLists.txt b/acxxel/CMakeLists.txt
index 4b21da3..547dd62 100644
--- a/acxxel/CMakeLists.txt
+++ b/acxxel/CMakeLists.txt
@@ -35,7 +35,7 @@
 set(CMAKE_CXX_STANDARD_REQUIRED ON)
 
 # Add warning flags.
-set(CMAKE_CXX_FLAGS  "${CMAKE_CXX_FLAGS} -Wall -Wextra -Wno-missing-braces")
+set(CMAKE_CXX_FLAGS  "${CMAKE_CXX_FLAGS} -Wall -Wextra")
 
 add_library(
     acxxel
diff --git a/acxxel/examples/opencl_example.cpp b/acxxel/examples/opencl_example.cpp
index 713daac..4e3cf07 100644
--- a/acxxel/examples/opencl_example.cpp
+++ b/acxxel/examples/opencl_example.cpp
@@ -57,9 +57,9 @@
 
 int main() {
   float A = 2.f;
-  std::array<float, 3> X = {0.f, 1.f, 2.f};
-  std::array<float, 3> Y = {3.f, 4.f, 5.f};
-  std::array<float, 3> Expected = {3.f, 6.f, 9.f};
+  std::array<float, 3> X{{0.f, 1.f, 2.f}};
+  std::array<float, 3> Y{{3.f, 4.f, 5.f}};
+  std::array<float, 3> Expected{{3.f, 6.f, 9.f}};
   saxpy(A, X, Y);
   for (int I = 0; I < 3; ++I)
     if (X[I] != Expected[I]) {
diff --git a/acxxel/tests/span_test.cpp b/acxxel/tests/span_test.cpp
index eee5aef..a425ceb 100644
--- a/acxxel/tests/span_test.cpp
+++ b/acxxel/tests/span_test.cpp
@@ -79,12 +79,12 @@
 }
 
 TEST(Span, StdArrayConstruction) {
-  std::array<int, 3> Array{0, 1, 2};
+  std::array<int, 3> Array{{0, 1, 2}};
   acxxel::Span<int> Span(Array);
   EXPECT_EQ(Span.data(), Array.data());
   EXPECT_EQ(static_cast<size_t>(Span.size()), Array.size());
 
-  std::array<const int, 3> ConstArray{0, 1, 2};
+  std::array<const int, 3> ConstArray{{0, 1, 2}};
   acxxel::Span<const int> ConstSpan(ConstArray);
   EXPECT_EQ(ConstSpan.data(), ConstArray.data());
   EXPECT_EQ(static_cast<size_t>(ConstSpan.size()), ConstArray.size());
