Changes in src/Common/utility.h [55a68c3:e4d829b]
- File:
-
- 1 edited
-
src/Common/utility.h (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/Common/utility.h
r55a68c3 re4d829b 25 25 #include <sstream> 26 26 #include <string> 27 #include <type_traits>28 27 29 28 #include <cassert> … … 306 305 // for ( val : group_iterate( container1, container2, ... ) ) {} 307 306 // 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 309 308 310 309 template< typename T1, typename T2 > … … 315 314 316 315 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; 322 319 typedef std::tuple<T1Iter, T2Iter> IterTuple; 323 320 IterTuple it; … … 327 324 } 328 325 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) ); } 330 327 }; 331 328 iterator begin() { return iterator( std::get<0>(args).begin(), std::get<1>(args).begin() ); } … … 337 334 338 335 template< typename... Args > 339 group_iterate_t<Args...> group_iterate( Args &&... args ) {340 return group_iterate_t<Args...>( std::forward<Args>( args )...);336 group_iterate_t<Args...> group_iterate( const Args &... args ) { 337 return group_iterate_t<Args...>(args...); 341 338 } 342 339
Note:
See TracChangeset
for help on using the changeset viewer.