From 2ff4301471d8fe2dd5c7a120eb84baa048c117f5 Mon Sep 17 00:00:00 2001 From: King_DuckZ Date: Wed, 26 Jul 2017 23:53:13 +0100 Subject: [PATCH] Use the last index, not just the last value in Vec. --- include/vectorwrapper/sequence_range.hpp | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/include/vectorwrapper/sequence_range.hpp b/include/vectorwrapper/sequence_range.hpp index 8b47084..6618ee0 100644 --- a/include/vectorwrapper/sequence_range.hpp +++ b/include/vectorwrapper/sequence_range.hpp @@ -111,6 +111,18 @@ namespace vwr { }; namespace implem { + template + struct get_at_index; + template + struct get_at_index { + static_assert(SEEK == IDX, "Index out of range"); + static constexpr size_type value = I; + }; + template + struct get_at_index { + static constexpr size_type value = (IDX == SEEK ? L : get_at_index::value); + }; + template struct make_sequence_helper; @@ -119,10 +131,11 @@ namespace vwr { typedef sequence_range, OP, CMP, I...> type; }; - template + template inline V make_end_vector (V parFrom, const V& parUpper) { - auto& last = parFrom[V::dimensions - 1]; - const auto& upper_last = parUpper[V::dimensions - 1]; + constexpr const size_type last_idx = get_at_index::value; + auto& last = parFrom[last_idx]; + const auto& upper_last = parUpper[last_idx]; last = upper_last; return parFrom; } @@ -181,7 +194,7 @@ namespace vwr { sequence_range::sequence_range (const V& parFrom, const V& parUpper) : m_from(parFrom), m_upper(parUpper), - m_end(implem::make_end_vector(parFrom, parUpper)) + m_end(implem::make_end_vector(parFrom, parUpper)) { }