Boost logo

Boost :

From: Markus Werle (numerical.simulation_at_[hidden])
Date: 2003-07-10 09:32:15


Hi!

Though Intel C++ compiles this without complaint
gcc fails with ICE on this code snippet, which is
preprocessor output of boost code:

struct void_ {};

template<
      bool C
    , typename T1
    , typename T2
>
struct if_c
{
    typedef T1 type;
};

template<
      typename T1
    , typename T2
>
struct if_c<false,T1,T2>
{
    typedef T2 type;
};

template<
      typename C = void_
    , typename T1 = void_
    , typename T2 = void_
>
struct if_
{
 private:
    typedef if_c<
          static_cast<bool>(C::value)
        , T1
        , T2
> almost_type_;

 public:
    typedef typename almost_type_::type type;

   
};

int main() {
  typedef if_<true_, double, int>::type D;
  D d;
}
-----------------------------------------------------

A resolution with which g++ is happy again is:

struct if_
{
 private:
  enum { value = static_cast<bool>(C::value) };

    typedef if_c<
        value
        , T1
        , T2
> almost_type_;
etc.

Does this solution have any impact on compilation time?

Markus

-- 
Build your own Expression Template Library with Daixtrose!
Visit http://daixtrose.sourceforge.net/ 

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