cons<First,nil>
От: Олег Гашев
Дата: 13.10.04 21:46
Оценка:
На cons<First,nil> компиллятор выдаёт ошибку: 37 C:\Dev-Cpp\main.cpp type/value mismatch at argument 2 in template parameter list for `template<class HT, class TT> struct boost::tuples::cons'

Вот код:


#include <iostream>
#include <stdlib.h>
#include <typeinfo>
#include <boost/tuple/tuple.hpp>

using namespace boost;

// choose the larger of two types
template<
typename T1
, typename T2
, bool choose1 = (sizeof(T1) > sizeof(T2)) // hands off!
>
struct choose_larger
{
    typedef T1 type;
};

// specialization for the case where sizeof(T2) >= sizeof(T1)
template< typename T1, typename T2 >
struct choose_larger< T1,T2,false >
{
    typedef T2 type;
};

// get the largest of a cons-list
template< typename T > struct largest;

// specialization to peel apart the cons list
template< typename First, typename Rest >
struct largest< tuples::cons<First,Rest> >
: choose_larger< First, typename largest<Rest>::type >
{
// type inherited from base
};
// specialization for loop termination
template< typename First >
struct largest< tuples::cons<First,nil> > //Error
{
    typedef First type;
};

int main()
{
    // print the name of the largest of my_types
    std::cout
    << typeid(largest< cons<int, double> >::type).name()
    << std::endl;
    system("PAUSE");
    return 0;
}


Код взят с http://www.boost.org/libs/mpl/doc/paper/mpl_paper.pdf страница 5. Как это лечится?
Либо я найду путь, либо проложу его. © Свифт
Re: cons<First,nil>
От: folk Россия  
Дата: 13.10.04 23:01
Оценка: 12 (1)
Здравствуйте, Олег Гашев, Вы писали:

ОГ>На cons<First,nil> компиллятор выдаёт ошибку: 37 C:\Dev-Cpp\main.cpp type/value mismatch at argument 2 in template parameter list for `template<class HT, class TT> struct boost::tuples::cons'


ОГ>Вот код:


[]

Это некорректный код, возможно при его написании использовалась некая древняя версия boost::tuple.
Изменил его чтобы заработало, изменения выделеные жирным:

#include <iostream>
#include <stdlib.h>
#include <typeinfo>
#include <boost/tuple/tuple.hpp>

using namespace boost;

// choose the larger of two types
template<
typename T1
, typename T2
, bool choose1 = (sizeof(T1) > sizeof(T2)) // hands off!
>
struct choose_larger
{
    typedef T1 type;
};

// specialization for the case where sizeof(T2) >= sizeof(T1)
template< typename T1, typename T2 >
struct choose_larger< T1,T2,false >
{
    typedef T2 type;
};

// get the largest of a cons-list
template< typename T > struct largest;

// specialization to peel apart the cons list
template< typename First, typename Rest >
struct largest< tuples::cons<First,Rest> >
: choose_larger< First, typename largest<Rest>::type >
{
// type inherited from base
};
// specialization for loop termination
template< typename First >
struct largest< tuples::cons<First,tuples::null_type> >
{
    typedef First type;
};

int main()
{
    // print the name of the largest of my_types
    std::cout
    << typeid(largest< tuple<int, double>::inherited >::type).name()
// либо tuples::cons<int,tuples::cons<double,tuples::null_type> >
// но никак не cons<int,double>
    << std::endl;
    system("PAUSE");
    return 0;
}


ОГ>Код взят с http://www.boost.org/libs/mpl/doc/paper/mpl_paper.pdf страница 5. Как это лечится?
На самом деле, люди не читают газеты, они принимают их каждое утро, так же как ванну. ©Маршалл Мак-Льюэн
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.