diff --git a/external/vector b/external/vector
index 8284611f05b0fbe21a1f84630e2726015cb1d96d..c8678e80660cd63b293ade80ece8eed2249c1b06 160000
--- a/external/vector
+++ b/external/vector
@@ -1 +1 @@
-Subproject commit 8284611f05b0fbe21a1f84630e2726015cb1d96d
+Subproject commit c8678e80660cd63b293ade80ece8eed2249c1b06
diff --git a/tests/unit/test_algorithms.cpp b/tests/unit/test_algorithms.cpp
index 2e82bcc9a6effc4e0fdbb70bbad3d7cddf443aba..b371b9d6f2d071057082e0354951876c7e732b80 100644
--- a/tests/unit/test_algorithms.cpp
+++ b/tests/unit/test_algorithms.cpp
@@ -14,9 +14,12 @@ TEST(algorithms, sum)
     EXPECT_EQ(10*2, nest::mc::algorithms::sum(v1));
 
     // make an array 1:20 and sum it up using formula for arithmetic sequence
-    std::vector<int> v2(20);
-    std::iota(v2.begin(), v2.end(), 1);
     auto n = 20;
+    std::vector<int> v2(n);
+    // can't use iota because the Intel compiler optimizes it out, despite
+    // the result being required in EXPECT_EQ
+    // std::iota(v2.begin(), v2.end(), 1);
+    for(auto i=0; i<n; ++i) { v2[i] = i+1; }
     EXPECT_EQ((n+1)*n/2, nest::mc::algorithms::sum(v2));
 }
 
diff --git a/tests/unit/test_synapses.cpp b/tests/unit/test_synapses.cpp
index 8cd9de04f57625ec7416e5a571ab24447c1a6cae..357a5a2a8a3f166476474a2c538a01f34d2f2853 100644
--- a/tests/unit/test_synapses.cpp
+++ b/tests/unit/test_synapses.cpp
@@ -58,30 +58,33 @@ TEST(synapses, expsyn_basic_state)
 
     auto ptr = dynamic_cast<synapse_type*>(mech.get());
 
+    auto n = ptr->size();
+    using view = synapse_type::view_type;
+
     // parameters initialized to default values
-    for(auto e : ptr->e) {
+    for(auto e : view(ptr->e, n)) {
         EXPECT_EQ(e, 0.);
     }
-    for(auto tau : ptr->tau) {
+    for(auto tau : view(ptr->tau, n)) {
         EXPECT_EQ(tau, 2.0);
     }
 
     // current and voltage vectors correctly hooked up
-    for(auto v : ptr->vec_v_) {
+    for(auto v : view(ptr->vec_v_, n)) {
         EXPECT_EQ(v, -65.);
     }
-    for(auto i : ptr->vec_i_) {
+    for(auto i : view(ptr->vec_i_, n)) {
         EXPECT_EQ(i, 1.0);
     }
 
     // should be initialized to NaN
-    for(auto g : ptr->g) {
+    for(auto g : view(ptr->g, n)) {
         EXPECT_NE(g, g);
     }
 
     // initialize state then check g has been set to zero
     ptr->nrn_init();
-    for(auto g : ptr->g) {
+    for(auto g : view(ptr->g, n)) {
         EXPECT_EQ(g, 0.);
     }
 
@@ -106,32 +109,35 @@ TEST(synapses, exp2syn_basic_state)
 
     auto ptr = dynamic_cast<synapse_type*>(mech.get());
 
+    auto n = ptr->size();
+    using view = synapse_type::view_type;
+
     // parameters initialized to default values
-    for(auto e : ptr->e) {
+    for(auto e : view(ptr->e, n)) {
         EXPECT_EQ(e, 0.);
     }
-    for(auto tau1: ptr->tau1) {
+    for(auto tau1: view(ptr->tau1, n)) {
         EXPECT_EQ(tau1, 0.5);
     }
-    for(auto tau2: ptr->tau2) {
+    for(auto tau2: view(ptr->tau2, n)) {
         EXPECT_EQ(tau2, 2.0);
     }
 
     // should be initialized to NaN
-    for(auto factor: ptr->factor) {
+    for(auto factor: view(ptr->factor, n)) {
         EXPECT_NE(factor, factor);
     }
 
     // initialize state then check factor has sane (positive) value
     // and A and B are zero
     ptr->nrn_init();
-    for(auto factor: ptr->factor) {
+    for(auto factor: view(ptr->factor, n)) {
         EXPECT_GT(factor, 0.);
     }
-    for(auto A: ptr->A) {
+    for(auto A: view(ptr->A, n)) {
         EXPECT_EQ(A, 0.);
     }
-    for(auto B: ptr->B) {
+    for(auto B: view(ptr->B, n)) {
         EXPECT_EQ(B, 0.);
     }
 
@@ -142,3 +148,4 @@ TEST(synapses, exp2syn_basic_state)
     EXPECT_NEAR(ptr->A[1], ptr->factor[1]*3.14, 1e-6);
     EXPECT_NEAR(ptr->B[3], ptr->factor[3]*1.04, 1e-6);
 }
+