diff --git a/common/test/tuplestest.cc b/common/test/tuplestest.cc index 0257db14994c8bde19595eaca39156540f098ae3..facd830d52457971bffe10a10303ed4afc28ddaa 100644 --- a/common/test/tuplestest.cc +++ b/common/test/tuplestest.cc @@ -39,6 +39,8 @@ int iteratorTupleTest() Tuple tuple(v.begin(), v.begin(), v.end()); + + assert(Size<Tuple>::value==3); int ret=0; if(Element<0>::get(tuple)!= v.begin()) { diff --git a/common/tuples.hh b/common/tuples.hh index 076b79bdcd176e7e12e8ca0893332028382264f3..355a1f06a869e46149ccadea9cad57535ec96a86 100644 --- a/common/tuples.hh +++ b/common/tuples.hh @@ -469,6 +469,33 @@ namespace Dune } }; + /** + * @brief Template meta_programm to query the size of a tuple + * + */ + template<typename T> + struct Size + { + enum { + /** @brief The value of the size of the tuple */ + value = -100000 + }; + }; + + template<typename T1, typename T2> + struct Size<Pair<T1,T2> > + { + enum { value=1+Size<T2>::value}; + }; + + + template<typename T1> + struct Size<Pair<T1,Nil> > + { + enum { value=1}; + }; + + /** * @brief Equality comparison operator for tuples. * @param tuple1 The first tuple.