fork(4) download
  1. #include <iostream>
  2. #include <tuple>
  3. #include <type_traits>
  4.  
  5. template<std::size_t I = 0, typename... Tp>
  6. typename std::enable_if<I == sizeof...(Tp), int>::type
  7. elements_size(std::tuple<Tp...>&) { return 0; }
  8.  
  9. template<std::size_t I = 0, typename... Tp>
  10. typename std::enable_if<I < sizeof...(Tp) && std::is_pod<typename std::tuple_element<I, std::tuple<Tp...>>::type>::value, int>::type
  11. elements_size(std::tuple<Tp...>& t) {
  12. return sizeof(typename std::tuple_element<I, std::tuple<Tp...>>::type) + elements_size<I + 1, Tp...>(t);
  13. }
  14.  
  15. int main()
  16. {
  17. std::tuple<int, int, char> t;
  18. std::cout << elements_size(t) << std::endl;
  19.  
  20. return 0;
  21. }
  22.  
  23.  
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
Standard input is empty
compilation info
In file included from prog.cpp:2:0:
/usr/include/c++/5/tuple: In instantiation of 'struct std::tuple_element<1u, std::tuple<char> >':
/usr/include/c++/5/tuple:755:12:   recursively required from 'struct std::tuple_element<2u, std::tuple<int, char> >'
/usr/include/c++/5/tuple:755:12:   required from 'struct std::tuple_element<3u, std::tuple<int, int, char> >'
prog.cpp:12:105:   recursively required from 'typename std::enable_if<((I < sizeof... (Tp)) && std::is_pod<typename std::tuple_element<__i, std::tuple<_Elements ...> >::type>::value), int>::type elements_size(std::tuple<_Elements ...>&) [with unsigned int I = 1u; Tp = {int, int, char}; typename std::enable_if<((I < sizeof... (Tp)) && std::is_pod<typename std::tuple_element<__i, std::tuple<_Elements ...> >::type>::value), int>::type = int]'
prog.cpp:12:105:   required from 'typename std::enable_if<((I < sizeof... (Tp)) && std::is_pod<typename std::tuple_element<__i, std::tuple<_Elements ...> >::type>::value), int>::type elements_size(std::tuple<_Elements ...>&) [with unsigned int I = 0u; Tp = {int, int, char}; typename std::enable_if<((I < sizeof... (Tp)) && std::is_pod<typename std::tuple_element<__i, std::tuple<_Elements ...> >::type>::value), int>::type = int]'
prog.cpp:18:33:   required from here
/usr/include/c++/5/tuple:755:12: error: invalid use of incomplete type 'struct std::tuple_element<0u, std::tuple<> >'
     struct tuple_element<__i, tuple<_Head, _Tail...> >
            ^
In file included from /usr/include/c++/5/tuple:38:0,
                 from prog.cpp:2:
/usr/include/c++/5/utility:85:11: note: declaration of 'struct std::tuple_element<0u, std::tuple<> >'
     class tuple_element;
           ^
stdout
Standard output is empty