Request Short Link
C++ 98
C++ 11
C++ 14
C++ 17
C++ 20
C++ 23
C++ 2c
for-loops as while-loops
array subscription
Show all implicit casts
Show all template parameters of a CallExpr
Use libc++
Transform std::initializer_list
Show noexcept internals
Show padding information
Show coroutine transformation
Show C++ to C transformation
Show object lifetime
Default
15
18
20
22
26
More
GitHub
Patreon
Issues
About
Policies
Examples
C++ Insights @ YouTube
Settings
Version
New C++ Insights Episode
×
Made by
Andreas Fertig
Powered by
Flask
and
CodeMirror
Source:
#include <iostream> template<typename T, typename... Ts> struct tuple{ T first_; tuple<Ts...> rest_; tuple(T first, Ts... rest) : first_{first}, rest_{tuple<Ts...>(rest...)} {} }; template<typename T> struct tuple<T>{ T first_; tuple(T first) : first_(first) {} }; template<int n, typename T, typename... Ts> struct nth_type : nth_type<n-1,Ts...>{ }; template<typename T, typename... Ts> struct nth_type<0,T,Ts...>{ using value_type = T; }; template<int n> struct getter{ template<typename... Ts> static typename nth_type<n, Ts...>::value_type& get(tuple<Ts...>& t){ return getter<n-1>::get(t.rest_); } }; template<> struct getter<0>{ template<typename T, typename... Ts> static T& get(tuple<T, Ts...>& t){ return t.first_; } }; template<int n, typename... Ts> typename nth_type<n, Ts...>::value_type & get(tuple<Ts...>& t){ return getter<n>::get(t); } int main() { tuple<char, int, double> three('a', 1, 3.14); get<2>(three); return 0; }
Insight:
Console: