Loki у меня нет но список типов нетрудно сделать самому, это у меня работает нормально (gcc 4.0.2)
| Код | #include <boost/aligned_storage.hpp>
namespace tl { template<class _P1, class _P2> struct type_list { typedef _P1 head; typedef _P2 tail; } struct null_type {};
template<class _List> struct max_sizeof; template<class _Ht, class _Tt> struct max_sizeof<type_list<_Ht,_Tt> > { enum {__value=sizeof(_Ht)>max_sizeof<_Tt>::__value ? sizeof(_Ht): max_sizeof(_Tt)}; } template<class _Ht> struct max_sizeof<type_list<_Ht,null_type> > {enum {__value=sizeof(_Ht)};}; template<> struct max_sizeof<null_type> {enum {__value=0};}; }
using tl::null_type; using tl::type_list; using tl::max_sizeof;
template<class _List> class variant { private: boost::aligned_storage<max_sizeof<_List> > __storage; };
typedef type_list<int, type_list<float, type_list<double, null_type>>> _List;
int main() { variant<_List> w; return 0; }
|
|