[prev in list] [next in list] [prev in thread] [next in thread] 

List:       boost-users
Subject:    [Boost-users] [1.33.1][mpl] increasing BOOST_MPL_LIMIT_LIST_SIZE
From:       Marc Mutz <marc () klaralvdalens-datakonsult ! se>
Date:       2006-04-27 13:19:36
Message-ID: 200604271519.38180.marc () klaralvdalens-datakonsult ! se
[Download RAW message or body]

Hi,

According to the mpl docs, defining above macro to e.g. 30 should make 
boost::mpl::list<> take 30 template arguments, and thus enable 
boost::variant<> to hold 21 different types (default: 20 on my platform (gcc 
4.0)). Yet compiling the attached sample program gives me attached error 
message, which indicates that mpl::list<> still takes only 20 template 
parameters.

Bug?

Thanks,
Marc

-- 
Marc Mutz -- marc@klaralvdalens-datakonsult.se, mutz@kde.org
Klarälvdalens Datakonsult AB, Platform-independent software solutions

["compile.log" (text/x-log)]

g++ -c -pipe -g -Wall -W -D_REENTRANT  -DQT_NO_KEYWORDS -DQT_NO_CAST_TO_ASCII \
-DQT_NO_CAST_FROM_ASCII -DQBA_NO_CAST_TO_VOID -DQBA_NO_CAST_TO_ASCII -DQT_GUI_LIB \
-DQT_CORE_LIB -DQT_SHARED -I/opt/qt-412p/mkspecs/linux-g++ -I. \
-I/opt/qt-412p/include/QtCore -I/opt/qt-412p/include/QtGui -I/opt/qt-412p/include \
-I/home/marc/KDAB/CVS/SWG-plotview -I. -I. -I. -o test_variant_size_limit.o \
                test_variant_size_limit.cpp
/usr/include/boost/variant/detail/make_variant_list.hpp:50: error: wrong number of \
                template arguments (30, should be 20)
/usr/include/boost/mpl/aux_/preprocessed/gcc/list.hpp:22: error: provided for \
'template<class T0, class T1, class T2, class T3, class T4, class T5, class T6, class \
T7, class T8, class T9, class T10, class T11, class T12, class T13, class T14, class \
                T15, class T16, class T17, class T18, class T19> struct \
                boost::mpl::list'
/usr/include/boost/variant/detail/make_variant_list.hpp:50: error: 'type' does not \
                name a type
/usr/include/boost/variant/variant.hpp: In instantiation of 'boost::variant<T01, T02, \
T03, T04, T05, T06, T07, T08, T09, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, \
T20, T21, boost::detail::variant::void_, boost::detail::variant::void_, \
boost::detail::variant::void_, boost::detail::variant::void_, \
boost::detail::variant::void_, boost::detail::variant::void_, \
boost::detail::variant::void_, boost::detail::variant::void_, \
boost::detail::variant::void_>': test_variant_size_limit.cpp:31:   instantiated from \
                here
/usr/include/boost/variant/variant.hpp:942: error: invalid application of 'sizeof' to \
                incomplete type 'boost::STATIC_ASSERTION_FAILURE<false>' 
/usr/include/boost/mpl/clear.hpp: In instantiation of 'boost::mpl::clear<int>':
/usr/include/boost/mpl/transform.hpp:113:   instantiated from \
                'boost::mpl::transform1<int, boost::unwrap_recursive<mpl_::arg<1> >, \
                mpl_::na>'
/usr/include/boost/mpl/eval_if.hpp:38:   instantiated from \
'boost::mpl::eval_if<boost::mpl::or_<boost::mpl::is_na<mpl_::na>, \
boost::mpl::is_lambda_expression<boost::unwrap_recursive<mpl_::arg<1> > >, \
boost::mpl::not_<boost::mpl::is_sequence<boost::unwrap_recursive<mpl_::arg<1> > > >, \
mpl_::bool_<false>, mpl_::bool_<false> >, boost::mpl::transform1<int, \
boost::unwrap_recursive<mpl_::arg<1> >, mpl_::na>, boost::mpl::transform2<int, \
                boost::unwrap_recursive<mpl_::arg<1> >, mpl_::na, mpl_::na> >'
/usr/include/boost/mpl/transform.hpp:138:   instantiated from \
'boost::mpl::transform<int, boost::unwrap_recursive<mpl_::arg<1> >, mpl_::na, \
                mpl_::na>'
/usr/include/boost/variant/variant.hpp:962:   instantiated from 'boost::variant<T01, \
T02, T03, T04, T05, T06, T07, T08, T09, T10, T11, T12, T13, T14, T15, T16, T17, T18, \
T19, T20, T21, boost::detail::variant::void_, boost::detail::variant::void_, \
boost::detail::variant::void_, boost::detail::variant::void_, \
boost::detail::variant::void_, boost::detail::variant::void_, \
boost::detail::variant::void_, boost::detail::variant::void_, \
boost::detail::variant::void_>' test_variant_size_limit.cpp:31:   instantiated from \
                here
/usr/include/boost/mpl/clear.hpp:31: error: invalid use of undefined type 'struct \
                boost::mpl::clear_impl<boost::mpl::non_sequence_tag>::apply<int>'
/usr/include/boost/mpl/aux_/clear_impl.hpp:28: error: declaration of 'struct \
                boost::mpl::clear_impl<boost::mpl::non_sequence_tag>::apply<int>'
/usr/include/boost/mpl/transform.hpp: In instantiation of \
                'boost::mpl::transform1<int, boost::unwrap_recursive<mpl_::arg<1> >, \
                mpl_::na>':
/usr/include/boost/mpl/eval_if.hpp:38:   instantiated from \
'boost::mpl::eval_if<boost::mpl::or_<boost::mpl::is_na<mpl_::na>, \
boost::mpl::is_lambda_expression<boost::unwrap_recursive<mpl_::arg<1> > >, \
boost::mpl::not_<boost::mpl::is_sequence<boost::unwrap_recursive<mpl_::arg<1> > > >, \
mpl_::bool_<false>, mpl_::bool_<false> >, boost::mpl::transform1<int, \
boost::unwrap_recursive<mpl_::arg<1> >, mpl_::na>, boost::mpl::transform2<int, \
                boost::unwrap_recursive<mpl_::arg<1> >, mpl_::na, mpl_::na> >'
/usr/include/boost/mpl/transform.hpp:138:   instantiated from \
'boost::mpl::transform<int, boost::unwrap_recursive<mpl_::arg<1> >, mpl_::na, \
                mpl_::na>'
/usr/include/boost/variant/variant.hpp:962:   instantiated from 'boost::variant<T01, \
T02, T03, T04, T05, T06, T07, T08, T09, T10, T11, T12, T13, T14, T15, T16, T17, T18, \
T19, T20, T21, boost::detail::variant::void_, boost::detail::variant::void_, \
boost::detail::variant::void_, boost::detail::variant::void_, \
boost::detail::variant::void_, boost::detail::variant::void_, \
boost::detail::variant::void_, boost::detail::variant::void_, \
boost::detail::variant::void_>' test_variant_size_limit.cpp:31:   instantiated from \
                here
/usr/include/boost/mpl/transform.hpp:113: error: no type named 'type' in 'struct \
                boost::mpl::clear<int>'
/usr/include/boost/mpl/eval_if.hpp: In instantiation of \
'boost::mpl::eval_if<boost::mpl::or_<boost::mpl::is_na<mpl_::na>, \
boost::mpl::is_lambda_expression<boost::unwrap_recursive<mpl_::arg<1> > >, \
boost::mpl::not_<boost::mpl::is_sequence<boost::unwrap_recursive<mpl_::arg<1> > > >, \
mpl_::bool_<false>, mpl_::bool_<false> >, boost::mpl::transform1<int, \
boost::unwrap_recursive<mpl_::arg<1> >, mpl_::na>, boost::mpl::transform2<int, \
                boost::unwrap_recursive<mpl_::arg<1> >, mpl_::na, mpl_::na> >':
/usr/include/boost/mpl/transform.hpp:138:   instantiated from \
'boost::mpl::transform<int, boost::unwrap_recursive<mpl_::arg<1> >, mpl_::na, \
                mpl_::na>'
/usr/include/boost/variant/variant.hpp:962:   instantiated from 'boost::variant<T01, \
T02, T03, T04, T05, T06, T07, T08, T09, T10, T11, T12, T13, T14, T15, T16, T17, T18, \
T19, T20, T21, boost::detail::variant::void_, boost::detail::variant::void_, \
boost::detail::variant::void_, boost::detail::variant::void_, \
boost::detail::variant::void_, boost::detail::variant::void_, \
boost::detail::variant::void_, boost::detail::variant::void_, \
boost::detail::variant::void_>' test_variant_size_limit.cpp:31:   instantiated from \
                here
/usr/include/boost/mpl/eval_if.hpp:38: error: no type named 'type' in 'struct \
                boost::mpl::transform1<int, boost::unwrap_recursive<mpl_::arg<1> >, \
                mpl_::na>'
/usr/include/boost/mpl/transform.hpp: In instantiation of \
'boost::mpl::transform1<int, \
boost::mpl::protect<boost::detail::make_reference_content<mpl_::void_>, 0>, \
                mpl_::na>':
/usr/include/boost/mpl/eval_if.hpp:38:   instantiated from \
'boost::mpl::eval_if<boost::mpl::or_<boost::mpl::is_na<mpl_::na>, \
boost::mpl::is_lambda_expression<boost::mpl::protect<boost::detail::make_reference_content<mpl_::void_>, \
0> >, boost::mpl::not_<boost::mpl::is_sequence<boost::mpl::protect<boost::detail::make_reference_content<mpl_::void_>, \
0> > >, mpl_::bool_<false>, mpl_::bool_<false> >, boost::mpl::transform1<int, \
boost::mpl::protect<boost::detail::make_reference_content<mpl_::void_>, 0>, \
mpl_::na>, boost::mpl::transform2<int, \
boost::mpl::protect<boost::detail::make_reference_content<mpl_::void_>, 0>, mpl_::na, \
                mpl_::na> >'
/usr/include/boost/mpl/transform.hpp:138:   instantiated from \
'boost::mpl::transform<int, \
boost::mpl::protect<boost::detail::make_reference_content<mpl_::void_>, 0>, mpl_::na, \
                mpl_::na>'
/usr/include/boost/variant/variant.hpp:969:   instantiated from 'boost::variant<T01, \
T02, T03, T04, T05, T06, T07, T08, T09, T10, T11, T12, T13, T14, T15, T16, T17, T18, \
T19, T20, T21, boost::detail::variant::void_, boost::detail::variant::void_, \
boost::detail::variant::void_, boost::detail::variant::void_, \
boost::detail::variant::void_, boost::detail::variant::void_, \
boost::detail::variant::void_, boost::detail::variant::void_, \
boost::detail::variant::void_>' test_variant_size_limit.cpp:31:   instantiated from \
                here
/usr/include/boost/mpl/transform.hpp:113: error: no type named 'type' in 'struct \
                boost::mpl::clear<int>'
/usr/include/boost/mpl/eval_if.hpp: In instantiation of \
'boost::mpl::eval_if<boost::mpl::or_<boost::mpl::is_na<mpl_::na>, \
boost::mpl::is_lambda_expression<boost::mpl::protect<boost::detail::make_reference_content<mpl_::void_>, \
0> >, boost::mpl::not_<boost::mpl::is_sequence<boost::mpl::protect<boost::detail::make_reference_content<mpl_::void_>, \
0> > >, mpl_::bool_<false>, mpl_::bool_<false> >, boost::mpl::transform1<int, \
boost::mpl::protect<boost::detail::make_reference_content<mpl_::void_>, 0>, \
mpl_::na>, boost::mpl::transform2<int, \
boost::mpl::protect<boost::detail::make_reference_content<mpl_::void_>, 0>, mpl_::na, \
                mpl_::na> >':
/usr/include/boost/mpl/transform.hpp:138:   instantiated from \
'boost::mpl::transform<int, \
boost::mpl::protect<boost::detail::make_reference_content<mpl_::void_>, 0>, mpl_::na, \
                mpl_::na>'
/usr/include/boost/variant/variant.hpp:969:   instantiated from 'boost::variant<T01, \
T02, T03, T04, T05, T06, T07, T08, T09, T10, T11, T12, T13, T14, T15, T16, T17, T18, \
T19, T20, T21, boost::detail::variant::void_, boost::detail::variant::void_, \
boost::detail::variant::void_, boost::detail::variant::void_, \
boost::detail::variant::void_, boost::detail::variant::void_, \
boost::detail::variant::void_, boost::detail::variant::void_, \
boost::detail::variant::void_>' test_variant_size_limit.cpp:31:   instantiated from \
                here
/usr/include/boost/mpl/eval_if.hpp:38: error: no type named 'type' in 'struct \
boost::mpl::transform1<int, \
boost::mpl::protect<boost::detail::make_reference_content<mpl_::void_>, 0>, \
                mpl_::na>'
/usr/include/boost/variant/variant.hpp: In constructor 'boost::variant<T0, T1, T2, \
T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \
T21, T22, T23, T24, T25, T26, T27, T28, T29>::variant() [with T0_ = T01, T1 = T02, T2 \
= T03, T3 = T04, T4 = T05, T5 = T06, T6 = T07, T7 = T08, T8 = T09, T9 = T10, T10 = \
T11, T11 = T12, T12 = T13, T13 = T14, T14 = T15, T15 = T16, T16 = T17, T17 = T18, T18 \
= T19, T19 = T20, T20 = T21, T21 = boost::detail::variant::void_, T22 = \
boost::detail::variant::void_, T23 = boost::detail::variant::void_, T24 = \
boost::detail::variant::void_, T25 = boost::detail::variant::void_, T26 = \
boost::detail::variant::void_, T27 = boost::detail::variant::void_, T28 = \
boost::detail::variant::void_, T29 = boost::detail::variant::void_]': \
                test_variant_size_limit.cpp:31:   instantiated from here
/usr/include/boost/variant/variant.hpp:1174: error: using invalid field \
'boost::variant<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, \
                T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, \
                T29>::storage_'
/usr/include/boost/variant/variant.hpp: In member function 'typename \
Visitor::result_type boost::variant<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, \
T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, \
T29>::internal_apply_visitor(Visitor&) [with Visitor = \
boost::detail::variant::destroyer, T0_ = T01, T1 = T02, T2 = T03, T3 = T04, T4 = T05, \
T5 = T06, T6 = T07, T7 = T08, T8 = T09, T9 = T10, T10 = T11, T11 = T12, T12 = T13, \
T13 = T14, T14 = T15, T15 = T16, T16 = T17, T17 = T18, T18 = T19, T19 = T20, T20 = \
T21, T21 = boost::detail::variant::void_, T22 = boost::detail::variant::void_, T23 = \
boost::detail::variant::void_, T24 = boost::detail::variant::void_, T25 = \
boost::detail::variant::void_, T26 = boost::detail::variant::void_, T27 = \
boost::detail::variant::void_, T28 = boost::detail::variant::void_, T29 = \
                boost::detail::variant::void_]':
/usr/include/boost/variant/variant.hpp:1157:   instantiated from 'void \
boost::variant<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, \
T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, \
T29>::destroy_content() [with T0_ = T01, T1 = T02, T2 = T03, T3 = T04, T4 = T05, T5 = \
T06, T6 = T07, T7 = T08, T8 = T09, T9 = T10, T10 = T11, T11 = T12, T12 = T13, T13 = \
T14, T14 = T15, T15 = T16, T16 = T17, T17 = T18, T18 = T19, T19 = T20, T20 = T21, T21 \
= boost::detail::variant::void_, T22 = boost::detail::variant::void_, T23 = \
boost::detail::variant::void_, T24 = boost::detail::variant::void_, T25 = \
boost::detail::variant::void_, T26 = boost::detail::variant::void_, T27 = \
boost::detail::variant::void_, T28 = boost::detail::variant::void_, T29 = \
                boost::detail::variant::void_]'
/usr/include/boost/variant/variant.hpp:1164:   instantiated from 'boost::variant<T0, \
T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, \
T20, T21, T22, T23, T24, T25, T26, T27, T28, T29>::~variant() [with T0_ = T01, T1 = \
T02, T2 = T03, T3 = T04, T4 = T05, T5 = T06, T6 = T07, T7 = T08, T8 = T09, T9 = T10, \
T10 = T11, T11 = T12, T12 = T13, T13 = T14, T14 = T15, T15 = T16, T16 = T17, T17 = \
T18, T18 = T19, T19 = T20, T20 = T21, T21 = boost::detail::variant::void_, T22 = \
boost::detail::variant::void_, T23 = boost::detail::variant::void_, T24 = \
boost::detail::variant::void_, T25 = boost::detail::variant::void_, T26 = \
boost::detail::variant::void_, T27 = boost::detail::variant::void_, T28 = \
boost::detail::variant::void_, T29 = boost::detail::variant::void_]' \
                test_variant_size_limit.cpp:31:   instantiated from here
/usr/include/boost/variant/variant.hpp:1749: error: using invalid field \
'boost::variant<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, \
                T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, \
                T29>::storage_'
/usr/include/boost/variant/variant.hpp:1749: error: return-statement with a value, in \
                function returning 'void'
make: *** [test_variant_size_limit.o] Error 1


["test_variant_size_limit.cpp" (text/x-c++src)]

#define BOOST_MPL_LIMIT_LIST_SIZE 30
#include <boost/variant.hpp>

class T01 {};
class T02 {};
class T03 {};
class T04 {};
class T05 {};
class T06 {};
class T07 {};
class T08 {};
class T09 {};
class T10 {};
class T11 {};
class T12 {};
class T13 {};
class T14 {};
class T15 {};
class T16 {};
class T17 {};
class T18 {};
class T19 {};
class T20 {};
class T21 {};

int main() {
    boost::variant<
        T01, T02, T03, T04, T05, T06, T07, T08, T09, T10,
        T11, T12, T13, T14, T15, T16, T17, T18, T19, T20,
        T21
    > v;

    return 0;
}


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic