Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/Common/utility.h

    r55a68c3 re4d829b  
    2525#include <sstream>
    2626#include <string>
    27 #include <type_traits>
    2827
    2928#include <cassert>
     
    306305// for ( val : group_iterate( container1, container2, ... ) ) {}
    307306// syntax to have a for each that iterates multiple containers of the same length
    308 // TODO: update to use variadic arguments
     307// TODO: update to use variadic arguments, perfect forwarding
    309308
    310309template< typename T1, typename T2 >
     
    315314
    316315        struct iterator {
    317                 typedef typename std::remove_reference<T1>::type T1val;
    318                 typedef typename std::remove_reference<T2>::type T2val;
    319                 typedef std::tuple<typename T1val::value_type &, typename T2val::value_type &> value_type;
    320                 typedef typename T1val::iterator T1Iter;
    321                 typedef typename T2val::iterator T2Iter;
     316                typedef std::tuple<typename T1::value_type, typename T2::value_type> value_type;
     317                typedef typename T1::iterator T1Iter;
     318                typedef typename T2::iterator T2Iter;
    322319                typedef std::tuple<T1Iter, T2Iter> IterTuple;
    323320                IterTuple it;
     
    327324                }
    328325                bool operator!=( const iterator &other ) const { return it != other.it; }
    329                 value_type operator*() const { return std::tie( *std::get<0>(it), *std::get<1>(it) ); }
     326                value_type operator*() const { return std::make_tuple( *std::get<0>(it), *std::get<1>(it) ); }
    330327        };
    331328        iterator begin() { return iterator( std::get<0>(args).begin(), std::get<1>(args).begin() ); }
     
    337334
    338335template< typename... Args >
    339 group_iterate_t<Args...> group_iterate( Args &&... args ) {
    340         return group_iterate_t<Args...>(std::forward<Args>( args )...);
     336group_iterate_t<Args...> group_iterate( const Args &... args ) {
     337        return group_iterate_t<Args...>(args...);
    341338}
    342339
Note: See TracChangeset for help on using the changeset viewer.