Boost logo

Boost :

From: David Abrahams (dave_at_[hidden])
Date: 2004-01-20 21:22:32


"Pavel Vozenilek" <pavel_vozenilek_at_[hidden]> writes:

> Following example fails on Intel C++ 7.0 and 8.0 (both Windows,
> plugged into VC6 IDE, using old Dinkumware) and 1.31 RC1:
>
> ________________________________
> #include <boost/type_traits/is_class.hpp>
>
> int main()
> {
> typedef const int an_array[10]; // remove const and it will compile
> bool b = ::boost::is_class<an_array>::value;
>
> return 0;
> }
> ________________________________
>

Try rewriting is_class from:

  template <typename T>
  struct is_class_impl<T const>
    : is_class_impl<T>
  {
  };

  template <typename T>
  struct is_class_impl<T volatile>
    : is_class_impl<T>
  {
  };

  template <typename T>
  struct is_class_impl<T const volatile>
    : is_class_impl<T>
  {
  };

to:

    template <typename T>
    struct is_class_impl<T const>
    {
        BOOST_STATIC_CONSTANT(bool, value = is_class_impl<T>::value);
    };

    template <typename T>
    struct is_class_impl<T volatile>
    {
        BOOST_STATIC_CONSTANT(bool, value = is_class_impl<T>::value);
    };

    template <typename T>
    struct is_class_impl<T const volatile>
    {
        BOOST_STATIC_CONSTANT(bool, value = is_class_impl<T>::value);
    };

Does it work when you do that?

-- 
Dave Abrahams
Boost Consulting
www.boost-consulting.com

Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk