Hi, Borland cannot handle this code:
#include <boost/type_traits.hpp> #include <boost/mpl/if.hpp> using namespace boost; using namespace boost::mpl; struct A {}; struct B {}; template <typename T> struct C : if_<is_empty<T>, A, B>::type {}; struct D { int i; }; struct E {}; struct F : C<D> {}; struct G : C<E> {}; Is there a known workaround? Can this be fixed? I keep on bumping into this problem and its variants. Or is there a better MPL idiom? TIA, Joel de Guzman [EMAIL PROTECTED] http://www.boost-consulting.com <errors follow> Borland 5.5.1 [no STLport] C:\dev\mpl_if.cpp: Error E2396 C:\dev\boost\boost/type_traits/is_convertible.hpp 190: Template argument must be a constant expression Error E2299 C:\dev\boost\boost/type_traits/is_convertible.hpp 190: Cannot generate template specialization from 'type_traits::ice_and<b1,b2,b3,b4,b5,b6,b7>' Error E2293 C:\dev\boost\boost/type_traits/is_convertible.hpp 190: ) expected Error E2230 C:\dev\boost\boost/type_traits/is_convertible.hpp 190: In-line data member initialization requires an integral constant expression Error E2230 C:\dev\boost\boost/mpl/bool_c.hpp 27: In-line data member initialization requires an integral constant expression Error E2029 C:\dev\boost\boost/type_traits/is_convertible.hpp 195: 'bool_c<&value>' must be a previously defined class or struct Error E2451 C:\dev\boost\boost/type_traits/is_empty.hpp 109: Undefined symbol 'value' Error E2401 C:\dev\boost\boost/type_traits/is_empty.hpp 109: Invalid template argument list Error E2299 C:\dev\boost\boost/type_traits/is_empty.hpp 109: Cannot generate template specialization from 'type_traits::ice_or<b1,b2,b3,b4,b5,b6,b7>' Error E2293 C:\dev\boost\boost/type_traits/is_empty.hpp 109: ) expected Error E2230 C:\dev\boost\boost/type_traits/is_empty.hpp 109: In-line data member initialization requires an integral constant expression Error E2029 C:\dev\boost\boost/type_traits/is_empty.hpp 193: 'bool_c<&value>' must be a previously defined class or struct Error E2029 C:\dev\boost\boost/mpl/aux_/value_wknd.hpp 30: 'is_empty<D>' must be a previously defined class or struct Error E2407 C:\dev\boost\boost/mpl/if.hpp 62: Dependent type qualifier 'aux::value_wknd<is_empty<D> >' has no member symbol named 'value' Error E2407 C:\dev\boost\boost/mpl/if.hpp 62: Dependent type qualifier 'aux::value_wknd<is_empty<D> >' has no member symbol named 'value' Error E2407 C:\dev\boost\boost/mpl/if.hpp 65: Dependent type qualifier 'aux::value_wknd<is_empty<D> >' has no member symbol named 'value' Error E2407 C:\dev\boost\boost/mpl/if.hpp 65: Dependent type qualifier 'aux::value_wknd<is_empty<D> >' has no member symbol named 'value' Error E2402 C:\dev\mpl_if.cpp 11: Illegal base class type: formal type 'typename if_<is_empty<T>,A,B>::type' resolves to 'typename if_c<,A,B>::type' Error E2029 C:\dev\mpl_if.cpp 16: 'C<D>' must be a previously defined class or struct Error E2396 C:\dev\boost\boost/type_traits/is_convertible.hpp 190: Template argument must be a constant expression Error E2299 C:\dev\boost\boost/type_traits/is_convertible.hpp 190: Cannot generate template specialization from 'type_traits::ice_and<b1,b2,b3,b4,b5,b6,b7>' Error E2293 C:\dev\boost\boost/type_traits/is_convertible.hpp 190: ) expected Error E2230 C:\dev\boost\boost/type_traits/is_convertible.hpp 190: In-line data member initialization requires an integral constant expression Error E2029 C:\dev\boost\boost/type_traits/is_convertible.hpp 195: 'bool_c<&value>' must be a previously defined class or struct Error E2451 C:\dev\boost\boost/type_traits/is_empty.hpp 109: Undefined symbol 'value' Error E2228 C:\dev\boost\boost/type_traits/is_empty.hpp 109: Too many error or warning messages *** 26 errors in Compile *** _______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost