1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
#include <iostream>
template < typename... > struct expand ;
template < typename T, typename... REST > struct expand< T, REST... > : expand<REST...>
{ using base = expand<REST...> ; static T element ; };
template < typename T > struct expand<T> { static T element ; };
int main()
{
std::cout << std::boolalpha
<< expand<int,double,bool,long>::element << '\n' // 30 + sizeof(int)
<< expand<int,double,bool,long>::base::element << '\n' // 20 + sizeof(double)
<< expand<int,double,bool,long>::base::base::element << '\n' // true // bool(10 + sizeof(long)
<< expand<int,double,bool,long>::base::base::base::element << '\n' ; // sizeof(long)
}
template < typename T, typename... REST > T expand<T,REST...>::element = T( sizeof...(REST) * 10 + sizeof(T) ) ;
template < typename T > T expand<T>::element = sizeof(T) ;
|