|
Boost Users : |
From: Christian Henning (chhenning_at_[hidden])
Date: 2008-02-28 00:01:27
Hi there, I'm trying to compile the following code using MSVC 7.1 but
it fails. Using MSVC 8 works which leaves me with the impression that
it might be a compiler bug.
#include <boost/utility/enable_if.hpp>
#include <boost/mpl/bool.hpp>
using namespace boost;
template < typename A > struct is_A : public mpl::true_ {};
template < typename B > struct is_B : public mpl::true_ {};
template< typename A >
struct enable_if_A : public enable_if< typename is_A< A >::type > {};
template< typename B >
struct enable_if_B : public enable_if< typename is_B< B >::type > {};
template < typename One >
inline void foo( typename enable_if_A< One >::type* ptr = 0 ) {}
template < typename One >
inline void foo( typename enable_if_B< One >::type* ptr = 0 ) {}
int _tmain(int argc, _TCHAR* argv[]) { return 0; }
After a while of tinkering I got it to compile when inheriting the
enable_if helper classes from enable_if<...>::type instead of from
enable_if<...>. The following works:
#include <boost/utility/enable_if.hpp>
#include <boost/mpl/bool.hpp>
using namespace boost;
template < typename A > struct is_A : public mpl::true_ {};
template < typename B > struct is_B : public mpl::true_ {};
template< typename A >
struct enable_if_A : public enable_if< typename is_A< A >::type >::type {};
template< typename B >
struct enable_if_B : public enable_if< typename is_B< B >::type >::type {};
template < typename One >
inline void foo( typename enable_if_A< One >* ptr = 0 ) {}
template < typename One >
inline void foo( typename enable_if_B< One >* ptr = 0 ) {}
int _tmain(int argc, _TCHAR* argv[]) { return 0; }
Is that a known issue with MSVC 7.1? Or is it always better to inherit
from enable_if<...>::type?
Regards,
Christian
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net