fork download
  1. #include <iostream>
  2. #include <iterator>
  3. #include <typeinfo>
  4. #include <vector>
  5.  
  6. template <class FwdIt>
  7. void test_func(FwdIt first) {
  8. using FwdIt_vt = typename std::iterator_traits<FwdIt>::value_type;
  9. using Declt_vt = decltype(*first);
  10.  
  11. std::cout << "iterator_traits: " << typeid(FwdIt_vt).name() << '\n';
  12. std::cout << "decltype: " << typeid(Declt_vt).name() << '\n';
  13. }
  14.  
  15. int main(int argc, char* args[]) {
  16. std::cout << "std::vector<int>::iterator" << '\n';
  17. std::vector<int> ints;
  18. test_func(ints.begin());
  19. std::cout << '\n';
  20.  
  21. std::cout << "std::vector<bool>::iterator" << '\n';
  22. std::vector<bool> bools;
  23. test_func(bools.begin());
  24. std::cout << '\n';
  25. }
Success #stdin #stdout 0s 3296KB
stdin
Standard input is empty
stdout
std::vector<int>::iterator
iterator_traits: i
decltype: i

std::vector<bool>::iterator
iterator_traits: b
decltype: St14_Bit_reference